본문 바로가기
Programming/JAVA

[JAVA] 자바의 Collection(List, Set, Queue)과 Map, Iterator 메소드

by 안녕주 2023. 9. 12.

아래에 코드들을 보면 

인터페이스형 = new 클래스형들 (ex List<String> list = new ArrayList<>)와 같은 형태들이 많다.

관련 내용은 이글을 함께 보면 좋다.

 

what is the java collection framework hierarchy collection sortedmap - layarkaca21

 

Collections

int[] arr = { 1123, 1412, 23, 44, 512132 };
List<Integer> list = new ArrayList<>(Arrays.asList(arr));

Collections.max(list) // list의 원소 중 가장 큰 값 반환
Collections.min(list) // list의 원소 중 가장 작은 값 반환

Collections.sort(list) // list 오름차순 정렬
Collections.sort(list, Collections.reverseOrder()) // list 내림차순 정렬

Collections.reverse(list) // list 역순 정렬 { 512132, 44, 23, 1412, 1123 }

Collections.frequency(list, 23) // list 내의 23의 갯수 반환

Collections.binarySearch(list, 44)
// 최초로 검색된 44의 인덱스 1 반환
// 없으면 44보다 큰 최초의 위치 2를 찾아서 -1을 곱하고 1을 빼서 반환 (-3)

 

List

  • List : [인터페이스] 메모리가 허용하는 한 계속 추가 가능한 자료형 클래스
  • ArrayList, LinkedList : [클래스] List의 클래스
List<String> list = new ArrayList<>();

list.add("서울") // list의 가장 뒤에 서울 삽입
list.add(1, "대전") // 1 위치에 대전 삽입
list.addAll(list2) // list의 뒤에 list2의 모든 값 삽입

list.get(0) // 0 위치의 값 반환 (서울)
list.set(0, "대구") // 0 위치의 값을 대구로 변경

list.indexOf("대구") // 대구의 첫번째 인덱스 반환
list.lastIndexOf("대구") // 대구의 마지막 인덱스 반환

list.remove(0) // 0 위치의 값 삭제
list.remove("대구") // 첫번째 대구 삭제
list.removeAll(list2) // list에서 list2에 들어있는 모든 값을 삭제
list.retainAll(list2) // list에서 list2에 들어있는 값을 제외한 모든 값을 삭제

list.clear() // 전체 값 삭제
list.isEmpty() // 길이가 0이면 true, 아니면 false
list.size() // 길이

list.contains("서울") // 서울이 list에 있으면 true, 없으면 false
list.containsAll(list2) // list에 list2의 모든 값이 포함되어 있으면 true

list.removeIf(k -> k % 2 != 0) // 람다식으로 홀수를 list에서 모두 제거

 

형변환

// 문자열 배열을 List로 변환
String[] temp = "abcde";
List<String> list = new ArrayList<>(Arrays.asList(temp));

// List를 문자열 배열로 변환
List<String> list = new ArrayList<>();
String[] temp = list.toArray(new String[list.size()]);

// 정수 배열을 List로 변환
int[] temp = { 1123, 1412, 23, 44, 512132 };
List<Integer> list = new ArrayList<>(Arrays.asList(temp));

// List를 정수 배열로 변환
List<Integer> list = new ArrayList<>();
int[] temp = list.stream().mapToInt(i->i).toArray();

 

 

Set

순서에 상관없이 어떤 데이터가 존재하는지를 확인하는 용도로 사용, 데이터가 중복되지 않는다.

  • HashSet : 순서가 전혀 필요없는 데이터를 해시 테이블에 저장한다. set 중 성능 best
  • TreeSet : 저장된 데이터의 값에 따라서 정렬되는 set. 트리타입으로 값이 저장되며 HashSet보다 성능이 약간 느리다
  • LinkedHashSet : 연결된 목록 타입으로 구현된 해시 테이블에 데이터를 저장한다. 저장된 순서 따라서 값이 정렬된다. set중 성능 worst
HashSet<Integer> set = new HashSet<>();

set.add(1) // 값 추가
set.remove(1) // 값이 1인 데이터 삭제
set.removeAll(set2) // set의 데이터 중 set2에 들어있는 데이터를 모두 삭제
set.retainAll(set2) // set의 데이터 중 set2에 들어있지 않은 데이터를 모두 삭제
set.clear() // 모든 데이터 삭제
set.size() // 크기 반환
set.contains(1) // 값 1이 있으면 true, 없으면 false

// 값 출력
// 방법 1: get 메소드가 없으므로 원소에 접근하려면 이터레이터 사용
Iterator iter = set.iterator();
while (iter.hasNext())
	System.out.println(iter.next());

// 방법 2: for-each문으로 원소에 접근
for (String item: set)
	System.out.println(item);

 

Stack & Queue

  • Stack : Last In First Out(LIFO)  형태의 자료구조
  • Queue : FIFO 형태의 자료구조, 인터페이스라 객체 생성이 불가능하다 따라서 LinkedList를 형변환해서 사용한다.
// 문자열 배열을 List로 변환
String[] temp = "abcde";
List<String> list = new ArrayList<>(Arrays.asList(temp));

// List를 문자열 배열로 변환
List<String> list = new ArrayList<>();
String[] temp = list.toArray(new String[list.size()]);

// 정수 배열을 List로 변환
int[] temp = { 1123, 1412, 23, 44, 512132 };
List<Integer> list = new ArrayList<>(Arrays.asList(temp));

// List를 정수 배열로 변환
List<Integer> list = new ArrayList<>();
int[] temp = list.stream().mapToInt(i->i).toArray();
Queue<Integer> queue = new LinkedList<>();

queue.add(1) // 값 추가
queue.offer(2) // 값 추가
queue.poll() // 첫 번째 값 반환, 비어있으면 null 반환
queue.remove() // 첫 번째 값 제거
queue.clear() // 값 모두 삭제
queue.peek() // 첫 번째 값 출력 (제거 X)

 

Map

  • HashMap : 일반적으로 가장 많이 사용하는 Map 객체. 속도가 빠른 대신 정렬순서는 알 수 없다.
  • TreeMap : 숫자 → 영어 대문자 → 영어 소문자 → 한글 순으로 정렬된다.
  • LinkedHashMap : 데이터를 넣은 순서대로 꺼낸다.
HashMap<Integer, String> map = new HashMap<>();
HashMap<String, String> map = new HashMap<>();

map.put(1, "사과")
map.put(2, "바나나")
map.put(1, "포도") // key 1이 이미 존재하면 key 1의 value가 "포도"로 대체

map.remove(1) // key 값으로만 요소 삭제 가능
map.clear() // 전체 삭제

map.containsKey(1) // key 값 중 1이 있으면 true, 없으면 false
map.containsValue("사과") // value 중 "사과"가 있으면 true, 없으면 false

// 값 출력
// 방법 1
for (Integer i: map.keySet())
	System.out.println(i + map.get(i)); // 1 사과

// 방법 2: key와 value가 모두 필요할 때 주로 사용
for (Entry<Integer, String> entry: map.entrySet())
	System.out.println(entry.getKey() + entry.getValue()); // 1 사과

 

Iterator

  • List, Set, Map, Queue 에서 값을 가져오거나 삭제할 때 사용
  • Iterator를 사용할 시 얻는 장점 : 모든 컬렉션에 사용가능, 3개의 메소드, 쉽게 값을 가져올 수 있음
  • Iterator를 사용할 시 얻는 단점 : 단방향 반복만 가능, 값을 변경하거나 추가 불가, 대량의 데이터에서 느림
ArrayList<String> list = new ArrayList<String>();
		list.add("A");
		list.add("B");
		list.add("C");
        
Iterator<String> iterList = list.iterator();

//(1) Iterator 안에 다음 값이 들어있는지 확인. 들었으면 true, 안들었음 false
Iterator.hasNext()

//(2) iterator의 다음 값 가져오기
Iterator.next()

//(3) iterator에서 next() 시에 가져왔던 값을 컬렉션(List, Set, Map) 등에서 삭제. 반드시 next() 후에 사용해야 함
Iterator.remove()

 

 

[Java] 코딩테스트 문법 속성 정리 (1) (velog.io)

[Java] 코딩테스트 문법 속성 정리 (2) (velog.io)

자바 컬렉션 Set — 하프연구소 (tistory.com)

자바(Java) 스택(Stack), 큐(Queue) 사용 방법 : 네이버 블로그 (naver.com)

칸쵸 :: [Java] Map 종류 및 순서 정리 (tistory.com)

자바 Iterator 개념부터 사용 방법까지 (tistory.com)

댓글