본문 바로가기
JAVA

JAVA Collection 자바 컬렉션

by yujinkimkim 2023. 7. 27.

Collection 프레임워크는 list, set, map 인터페이스로 나뉘고

list는 중복 저장 가능, set는 불가능, map(키와 값으로 구성됨)은 키 중복 저장 안 됨

 

각 인터페이스 사용 가능한 컬렉션 객체 종류

List에는 ArrayList, Vector, LinkedList

Set에는 HashSet, TreeSet

Map에는 HashMap, Hashtable, TreeMap, Properies

 

List

List<Integer> list = new ArrayList<>(); //정수형만 가능, 뒤에 <>에는 자료형 생략 가능
		List list2 = new ArrayList(); //모든 타입 객체 저장 가능
		
		list2.add(1);
		list2.add("5");
		list2.add(null); //null 저장 가능
		list2.add(1, 'c'); //해당 인덱스에 저장
		
		for(int i = 0 ; i < list2.size(); i++)
			System.out.println(list2.get(i));
		
		list.add(null);
		System.out.println(list2.remove(0)); //remove는 해당 인덱스에 저장된 객체 반환 후 삭제
		
		if(list2.remove("5")) //인덱스 말고 객체 넣으면 boolean 반환
			System.out.println("5삭제 완료");

ArrayList는 배열과 달리 제한없이 추가 가능하고, 객체의 주소를 저장하는 구조로, 동일한 객체면 동일한 주소가 저장됨

객체를 사이에 추가하거나 삭제할 때, 그 뒤로 다 밀려나거나 당겨져서 이동이 많이 일어나게 되니까 삽입이랑 삭제를 많이 해야할 경우에는 LinkedList사용

 

Vector는 ArrayList랑 내부 구조 비슷한데 동기화된 메소드로 구성되어 있어서 멀티 쓰레드가 동시에 실행할 수 없게 됨

 

contains를 사용하면 시간복잡도가 O(n)이라 hashtable을 사용하면 효과적이라는데 아래 글에 완죤 자세히 나와있습니다

[자료구조] 해시테이블(HashTable)이란? - MangKyu's Diary (tistory.com)

 

[자료구조] 해시테이블(HashTable)이란?

1. 해시테이블(HashTable)이란? [ HashTable(해시테이블)이란? ] 해시 테이블은 (Key, Value)로 데이터를 저장하는 자료구조 중 하나로 빠르게 데이터를 검색할 수 있는 자료구조이다. 해시 테이블이 빠른

mangkyu.tistory.com

hash함수 관련 글

[Java] 해시코드(hashCode)란 무엇인가? :: Gyun's 개발일지 (tistory.com)

[java] hashcode()와 equals() 메서드는 언제 사용하고 왜 사용할까? (tistory.com)

☕ 자바 equals / hashCode 오버라이딩 - 완벽 이해하기 (tistory.com)

 

 

Set

Set는 인덱스로 관리하지 않기에 인덱스를 매개값으로 갖는 메소드가 없음

때문에 검색할 때 객체를 한 개씩 반복해서 가져와야함 -> Iterator

 

Iterator

-hasNext() 가져올 객체가 있으면 true, 아니면 false 반환

-next() 하나의 객체 가져옴

-remove() 

 

HashSet은 동등한 객체는 중복 저장하지 않는데,

다른 객체라도 hashCode() 리턴값이 같고, equals()가 true를 리턴하면 동등한 객체라고 판단하고 중복 저장하지 않음

//같은 문자열이면 hashCode() 리턴값이 같고 equals()리턴값이 true나옴

 

Map

map은 키와 값으로 구성된 엔트리 객체를 저장합니다

코딩의 시작, TCP School

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

put으로 객체를 추가할 수 있는데 V put(K key, V value) 형태로, 저장이 되면 값을 리턴해준대요

ArrayList나 Set 처럼 모든 타입의 키와 객체를 저장할 수 있도록 <>를 생략할 수 있긴 한데, 거의 그렇게 안 쓴대요

 

자료형 적을 때나 메소드 뭐 쓸 때 Integer로 하잖아요 이거 int랑 차이점이 뭔가 찾아봤어요

[Java] int와 Integer는 뭐가 다를까? (tistory.com)

hashtable이 vector랑 똑같이 동기화를 지원해준대요, vector의 add()와 hashtable의 put()이 동기화 메소드라네요

properties는 hashtable의 자식 클래스라 hashtable특징을 그대로 갖고 있는데, 키와 값을 String타입으로 제한한 컬렉션으로, 키와 값이 =로 연결된 properties파일 읽을 때 쓴다네요

 

TreeSet / TreeMap

TreeSet / TreeMap (velog.io)

 

TreeSet은 이진트리 기반 Set컬렉션

TreeMap은 이진트리 기반 Map컬렉션으로, 엔트리를 저장하는데, 키를 기준으로 자동 정렬됨

 

정렬되려면 객체가 Comparable 인터페이스를 구현하고 있어야하는데, Integer, Double, String타입은 모두 구현하고 있어서 괜찮은데 사용자 정의 객체 저장할 때는 Comparable 구현하고 있어야됨

Comparable 인터페이스에 compareTo()메소드가 정의되어 있어서 사용자 정의 클래스에서 이 메소드를 재정의해서 비교 결과를 리턴해줘야함

체리 한 세트 클리어 ㅎㅎ

댓글