1006(16일차)
복습
Data Structure
-data in memory 대용량 데이터를 메모리에서 처리하는 방법
List:순서가 중요할때, 정렬 필요할 때.
set:중복을 허용하지 않을 때
map:key와 value를 묶어서 분류할 때(key로 value를 찾음,key는 중복x)
List
ArrayList
LinkedList
:위의 두 리스트는 사용할 수 있는 메소드는 같지만 구조가 다름
Queue
Stack
ArrayList | LinkedList |
내부 배열을 관리하지 않는다. | |
요소와 요소를 연결해서 관리한다.(주소값) | |
중간에 요소 추가 및 삭제가 빈번한 데이터에 사용. 그래서 조회/검색이 빈번하다면 ArrayList가 더 효율적이다. =>검색은 ArrayList가 빠름. =>LinkedList는 전부 다 뒤져봐야함. 마지막 요소는 다음번지를 가르키는 값이 null |
Queue | Stack |
선입선출(FIFO):먼저들어오고 먼저 나간다![]() |
후입선출(LIFO):나중에 들어온게 먼저 나간다![]() |
Queue.offer(T) :마지막에 요소 추가 Queue.poll():T :맨 앞에 요소 가져오고 제거 while(!queue.isEmpty()) :일괄출력할 때 비어있는지 물어보고 true면 반복 |
Stack.push(T) :마지막에 요소 추가 Stack.pop():T :마지막 요소 가져오고 제거 Stack.peek():T :마지막 요소 엿보기(제거하진 않음) |
ArrayList와 같은 배열기반 작업 | 데이터 추가/삭제가 용이한 LinkedList |
Set
-집합
-중복을 허용하지 않는 자료 구조.
-저장한 순서를 보장하지 않는다.
-커스텀 클래스인 경우 equals와 hashcode override 필수.
-다형성과 제네릭 적용
1)HashSet
HashSet<Integer> set1 = new HashSet<>(); Set<String>set2 = new HashSet<>(); Collection<Double> set3 = new HashSet<>(); |
|
요소 추가 | set2.add("hi"); 해당 제네릭에 맞춰서 추가해줘야 한다. set2는 String만 다룬다. |
요소 출력 | 순서를 보장하지 않기 때문에 get(index)같이 인덱스를 사용할 수 없음. 일반for문 사용불가 전체를 순회하면서 꺼내와야 한다. 중복된 요소가 있다면 중복이 제거되어 한 번만 출력된다 add한 순서와 상관없이 출력된다. 출력방법 1)foreach for(String str:set2) 2)Iterator Iterator<String> iter = set2.iterrator(); while(iter.hasNext()) |
요소 삭제 | println등으로 확인시 true/false도 반환한다. equals, hashcode기반으로 요소를 찾아 삭제. set2.remove("hi"); |
요소 갯수 | set2.size(); |
요소 포함 여부 | set2.contains("bye"); 포함되어있다면 true를, 포함되어있지 않다면 false 리턴 |
List<->Set 으로 사용하는 경우도 있음.
List에서 Set: 중복제거
Set에서 List: 정렬필요
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(3);
list.add(1);
list.add(3);
list.add(5);
System.out.println(list);
//Set으로 변환 set생성시 list의 제네릭과 동일한 타입으로,.
Set<Integer> set = new HashSet<>(list);
System.out.println(set); //중복 제거
//
Set<Integer> nums = new HashSet<>();
nums.add(11);
nums.add(26);
nums.add(44);
nums.add(100);
List<Integer> lists = new ArrayList<>(set);
System.out.println(lists); //순서
2)LinkedHashSet
중복제거, 저장한 순서를 유지함
add로 요소 추가 시 , 추가한 순서 유지. but 여전히 index 사용 불가
3)TreeSet
중복제거, 기본정렬을 지원한다.
오름차순으로 정렬
Map
-key와 value가 한 쌍의 요소인 자료 구조.
-key는 중복을 허용하지 않는다.
-key를 통해 value를 조회하는 구조.(속도가 빠르다)
-동일한 key로 새 value를 저장하면 기존 value에 덮어씌워진다.
-컬렉션을 통해 제어 할 수 없다.
1) HashMap
HashMap<k,v> 변수명 = new HashMap<>();
Map<k,v> 변수명 = new HashMap<>();
Map<String, Integer> map = new HashMap<>();
|
|
요소 추가하기 | map .put(k,v); 지정한 제네릭에 맞춰서 key value값 대입 예시에선 key:String / value:Integer 타입이다. |
요소 가져오기 | map .get(k); |
저장된 요소 갯수 | map .size(); |
요소 삭제 | map.remove(k); key값으로 삭제함. 만약 print문으로 감싼다면 삭제된 value를 반환해서 출력해줌. |
key 값 포함 여부 | true false로 반환 map.containsKey(k); |
value 값 포함 여부 | true false로 반환 map.conteainsValue(v); |
Map 순회하기 맵은 순차적으로 접근이 불가능하다. (인덱스 x 반복문 x) 우회적으로 순회하여 값을 확인해야한다. |
|
keySet() | entrySet() |
Set<k> 키 값을 Set으로 반환한다. set과 map 둘다 중복을 허용치 않기 때문에 가능. |
Set<Entry<k,v>> key와 value를 묶어서 entry로 제어한다. |
2)LinkedHashMap
3)TreeMap
3)Properties
-collections Framwork 이 전부터 사용된 legacy 클래스.
-현재에도 사용됨.
-key,value 타입을 String으로 제한한 맵 형식의 자료 구조.
-실제 설정파일 *.properties의 내용을 읽어 프로그램으로 가져오는데 사용한다.
-그 외에 xml도 다룰 수 있다.