[JAVA] Collection : List, Set, Map
maps.containsValue(value);
1. Java Collection의 주요 인터페이스 : List, Map, Set
--> 필요한 때에 적절히 다르게 사용됨
--> 인터페이스를 구분하는 가장 중요한 개념은 '순서', '데이터의 중복여부'
List : 순서 O, 데이터중복 O / add로 넣고 인덱스[]로 가져온다.
List 인터페이스를 구현한 클래스 : ArrayList, AttributeList, LinkedList, Stack 등
Set : 순서 X, 데이터중복 X / 중복해서 관리하지 않도록 할 때 사용
Set 인터페이스를 구현하는 클래스 : HashSet, Linked HashSet, TreeSet
Map : Key&Value 저장, Key중복 X, Value중복 O
Map 인터페이스를 구현하는 클래스 : HashMap, TreeMap, LinkedHashMap, Hashtable
KeySet : 맵의 목록
List
List는 데이터를 순서에 맞게 일렬로 구성하는데, 인덱스가 부여되기 때문에 인덱스로 검색 가능하다.
Set과는 다르게 중복을 허용한다.
ArrayList
- ArrayList는 resizable-array임, 즉, 저장 용량이 자동으로 늘어난다.
기본 생성자로 ArrayList를 생성하면 10개의 객체저장 용량을 기본으로 갖는다.
처음부터 용량을 더 크게 잡고 생성할 수도 있다.
List myList = new ArrayList(100);
myList.add("person");
String name = (String)list.get(0);
- ArrayList는 Object타입으로 변환되어 저장되기 때문에, 모든 종류의 객체를 저장할 수 있다.
그러나 저장/조회 시 Object로 변환해야 하므로 성능 효율이 떨어진다.
이 점을 보완하려면 제네릭으로 해결
List<String> myList = new ArrayList<String>();
myList.add("person");
String name = list.get(0);
Set
Set은 중복된 요소를 포함할 수 있다.
List와는 다르게, 인덱스를 사용하지 않기 때문에 인덱스 매개변수가 없다.
HashSet
- 해싱로직을 사용하여 객체를 저장한다. 중복 데이터는 저장하지 않는다.
- Sorting(타입에 따라 다르다.)
* HashSet : 랜덤
Set<String> set1 = new HashSet<>();
set1.add("홍길동1");
set1.add("홍길동2");
set1.add("홍길동3");
System.out.println("HashSet 랜덤정렬 : " + set1);
HashSet 랜덤정렬 : [홍길동2, 홍길동1, 홍길동3]
* LinkedHashSet : 입력 순서대로
Set<String> set2 = new LinkedHashSet<>();
set2.add("홍길동1");
set2.add("홍길동2");
set2.add("홍길동3");
System.out.println("LinkedHashSet 입력순으로 : " + set2);
LinkedHashSet 입력순으로 : [홍길동1, 홍길동2, 홍길동3]
* TreeSet : comparator에 의해서
Set<String> set3 = new TreeSet<>();
set3.add("홍길동1");
set3.add("홍길동2");
set3.add("홍길동3");
System.out.println("TreeSet Comparator : " + set3);
TreeSet Comparator : [홍길동1, 홍길동2, 홍길동3]
Map
Map은 Key와 Value로 구성된 객체를 저장한다.
Key는 중복저장될 수 없다.
HashMap 기본 메서드
- HashMap 선언
Map<KeyType, ValueType> maps = new HashMap<KeyType, ValueType>();
- 값 추가
maps.put("key", value);
- 조회
map.get("key");
- Key 체크
maps.containsKey("key");
- Value 체크
maps.containsValue(value);
- forEach
maps.forEach(key, value) ···생략···);