컬렉션은 한마디로 데이터의 집합, 그룹을 의미한다. 자바에서는 Java Collection Framework(JCF)라는, 동적 배열 개념의 컬렉션과 이를 구현하는 메서드를 정의하는 인터페이스를 제공한다.
위는 자바 컬렉션 프레임워크의 기본 상속 구조이다. 자바에서는 위 같이 많은 종류의 컬렉션을 제공한다.
오늘은 가장 많이 쓰이는 List, Set, 그리고 Map에 대하여 살펴보자.
List는 순서가 있으며, 데이터의 중복을 허용 한다.
또한, 인덱스로 데이터의 접근이 가능하다.
예시 :public class Main { public static void main(String[] args) { List list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); System.out.println("first element : " + list.get(0)); // 1 for (Object i : list){ System.out.println(i); } } //출력: 1 2 3 }
- List의 종류
- ArrayList : 단반향 포인터 구조, 데이터 순차적 접근(조회)가 빠름
- LinkedList : 양방향 포인터 구조, 데이터 삽입, 삭제가 빠름
- Stack : 스택 자료 구조, 후입선출(FILO)
set은 순서가 없으며 데이터의 중복을 허용하지 않는다. 또한, 인덱스가 따로 존재하지 않기 때문에 Iterator를 사용하여 조회 한다.
예시 :public class Main { public static void main(String[] args) { HashSet set = new HashSet(); set.add("Hello"); set.add("World"); set.add("Test"); set.add("Hello"); // 중복 데이터 테스트 Iterator<String> itr = set.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } //출력 Hello Test World }
위와 같이 Set은 데이터의 중복이 안되며, 순서가 없다.
- Set의 종류
- HashSet : 순서를 보장하지 않음, NULL 값을 허용, TreeSet보다 삽입, 삭제가 빠름.
- LinkedHashSet : 입력 순서를 보장
- TreeSet: 이진 탐색 트리(Red-Black Tree) 기반, 데이터들이 오름차순으로 정렬, 정렬이 빠름.
Map의 경우 Collection 인터페이스를 상속받고 있지 않지만 Collection으로 분류된다. 키(Key), 값(Value)의 쌍으로 이루어진 데이터의 집합으로,
순서는 유지되지 않으며 키(Key)의 중복을 허용하지 않으나 값(Value)의 중복은 허용한다.
예시 :public class Main { public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<>(); map.put("One", 1); map.put("Two", 2); map.put("Three", 3); map.put("One", 11); System.out.println("Value of One is : " + map.get("One")); for(Map.Entry<String, Integer> e : map.entrySet()){ System.out.println(e.getKey() + " " + e.getValue()); } } //출력 Value of One is : 11 One 11 Two 2 Three 3 }
위와 같이 존재하는 키에 새로운 값이 들어오면 덮어씌워진다.
- Map의 종류
- HashMap: 키에 대한 입력 순서를 보장하지 않음
- LinkedHashMap : 키에 대한 입력 순서를 보장함
- TreeMap : 이진 탐색 트리(Red-Black Tree)를 기반으로 Key&Value를 저장.
(default) 입력한 키의 크기가 비교 가능한 경우 오름차순으로 정렬됨.
입력하는 데이터가 사용자 정의 객체인 경우 Comparable을 구현하여, 정렬 기준 설정 가능
추후에 다른 컬렉션도 공부 해보자