개발/Java

Collection - List, Map, Set

멍냐옹2 2023. 2. 21. 15:34
반응형

자바 컬렉션의 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

 

반응형