Collection - List, Map, Set
자바 컬렉션의 3가지 List, Map, Set의 차이를 알아보자
1. List
ArrayList, LinkedList 등 존재
중복 가능 O, 순서 존재 O
1) 추가
ArrayList<String> list = new ArrayList<>();
// 데이터 추가
list.add("유재석");
list.add("조세호");
list.add("김종국");
list.add("박명수");
list.add("강호동");
2) 조회
// 데이터 조회 (인덱스)
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
System.out.println(list.get(3));
System.out.println(list.get(4));
3) 삭제
값, 인덱스로 삭제 가능
clear() : 리스트 전체 값 삭제
list.remove("박명수");
list.remove(list.size() - 1);
list.clear();
4) 크기 확인
System.out.println("신청 학생 수 : " + list.size());
5) 변경
// 첫번째(인덱스 : 0) 데이터를 변경 한다
list.set(0, "이수근");
6) 데이터 확인
indexOf() 는 해당 값의 위치를 return 해주고, contains는 포함 여부 bool로 return해준다.
// list에 해당 값이 존재하는지 확인
list.indexOf("김종국")
list.contains("김종국")
7) 정렬
기본은 오름차순.
Collections.sort(list);
8) ArrayList vs LinkedList차이
ArrayList는 말 그대로 Array, 배열의 형태로 데이터를 관리한다.
그렇기 때문에 [2]번 인덱스의 데이터를 삭제하게 되면, [3]~[5]번 인덱스의 데이터를 한칸씩 땡겨 [2]~[4]번으로 변경되고 [5]번 인덱스는 없어지게 된다. 데이터가 많을 수록 해당 과정에 시간이 오래 걸린다.
LinkedList는 Node끼리 연결 되어 있는 포인터 형태이다.
그렇기 때문에, [2]번 인덱스를 삭제 하게 되어도 [1], [3]번이 다시 연결을 하면 되므로 ArrayList보다 삭제에 시간이 덜 소요된다.
ArrayList | LinkedList | |
장점 | 같은 배열안에서 데이터를 관리하므로 검색에 용이함 | 포인터로 서로 연결되어 있기 때문에 삭제에 용이함 |
단점 | 데이터를 삭제하는 경우 시간이 소요 됨 | 포인터로 찾아야 하므로 검색에 시간이 소요됨 |
2. Map
key, value로 이루어진 데이터 쌍
Key 중복 가능 X, Value 중복 가능 O, 순서 존재 X
1) 추가
HashMap<String, Integer> map = new HashMap<>();
// 데이터 추가
map.put("유재석", 10);
map.put("박명수", 5);
map.put("김종국", 3);
map.put("서장훈", 15);
2) 조회
map.get("유재석");
// key
for (String s : map.keySet()) {
System.out.print(s + "\t");
}
// value
for (Integer i : map.values()) {
System.out.print(i + "\t");
}
// key and value
for (String s : map.keySet()) {
System.out.println("고객 이름 : " + s + " 포인트 : " + map.get(s));
}
3) 삭제
map.remove("유재석");
map.clear();
4) 크기 확인
System.out.println("신청 학생 수 : " + map.size());
5) 데이터 확인
포함여부 bool로 return
map.containsKey("서장훈")
3. Set
중복 가능 X, 순서 존재 X
1) 추가
삼겹살을 여러번 add해도 1번만 add처리 됨.
HashSet<String> set = new HashSet<>();
set.add("삼겹살");
set.add("쌈장");
set.add("음료");
set.add("소금");
set.add("후추");
set.add("삼겹살");
set.add("깻잎");
set.add("상추");
set.add("삼겹살");
2) 조회
HashSet은 Iterator를 이용하여 조회
Iterator<String> itSet = set.iterator();
while (itSet.hasNext()){
System.out.println(itSet.next());
}
3) 삭제
set.remove("삼겹살");
set.clear();
4) 크기 확인
System.out.println("총 구매 상품 수 : " + set.size());
5) 데이터 확인
포함여부 bool로 return
set.contains("삼겹살")
6) LinkedHasSet
LinkedHasSet은 순서가 보장된다.
설명 | 종류 | |
List | 순서가 보장되며, 중복이 가능하다 | ArrayList, LinkedList |
Map | 순서가 보장되지 않으며 Key에 대한 중복이 불가능하다 | HaspMap, TreeMap |
Set | 순서가 보장되지 않으며, 중복이 불가능하다 | HashSet, LinkedHashSet, TreeSet |