Java 기본 (6) - Collection(List / Set / Map) / Iterator / 유틸 클래스(Arrays, Collections)
ref : 남궁성님의 자바의 정석 유튜브를 참조합니다
https://www.youtube.com/watch?v=z9GpUGoYCw4&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=118
https://www.youtube.com/watch?v=RscGmop2Bzo&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=119
https://www.youtube.com/watch?v=u0pJGFyvrqc&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=133
https://gangnam-americano.tistory.com/41
컬렉션 프레임워크
[ 설명 ]
컬렉션 프레임워크(Collection Framework)
컬렉션(다수의 객체)
을 다루기 위한 표준화된 프로그래밍 방식
컬렉션
을 쉽고 편리하게 다룰 수 있는
다양한 클래스
제공
(저장
삭제
검색
정렬
등)
컬렉션 클래스
다수의 데이터
를 저장
할 수 있는 클래스
- ex)
Vector
, ArrayList
, HashSet
등
[ 핵심 인터페이스 ]
[ Collection 인터페이스 메서드 ]
List 인터페이스
[ 정보 ]
설명
순서
가 있으며
, 데이터의 중복
을 허용
Collection 인터페이스
의 자손
ArrayList
/ LinkedList
/ Stack
/ Vector
등
ArrayList
와 LinkedList
가 핵심
- ex) 대기자 명단
구조
주요 메서드
[ ArrayList ]
설명
- 기존의
Vector
를 개선한 것
으로 구현원리
와 기능적
으로 동일
Vector
는 동기화 처리 O
/ ArrayList
는 동기화 처리 X
List 인터페이스
를 구현 --> 순서 O
/ 중복 O
데이터 저장공간
으로 배열
을 사용(배열 기반
)
데이터
는 Object
만 가능 --> 즉, 객체
만 가능
기본형(primitive type)
을 넣어도 되긴함 --> 컴파일러
가 오토박싱
을 해주기 때문
정렬
을 할때에는 Collections
라는 유틸 클래스
를 통해 수행
- 오름차순 :
Collections.sort(list)
- 내림차순 :
Collections.sort(list, Collections.reverseOrder())
- 모든 객체 삭제시 유의
- 첫번째 요소부터 삭제 :
배열 복사 발생 O
--> 비효율적
- 마지막 요소부터 삭제 :
배열 복사 발생 X
--> 훨씬 효율적
생성자
- ArrayList() :
기본 생성자
- ArrayList(Collection c) :
컬렉션
으로 초기화
- ArrayLis(int initialCapacity) :
배열의 길이 지정
추가
- boolean add(Object o) :
맨 뒤에 삽입
- void add(int index, Object element) :
특정 위치
에 삽입
- boolean addAll(Collection c)
- boolean addAll(int index, Collection c)
삭제
- boolean remove(Object o) :
해당 객체 삭제
- Object remove(int index) :
특정 위치에 있는 객체
삭제
- boolean removeAll(Collection c) :
collection에 있는 객체
들 삭제
- void clear() :
모든 객체 삭제
검색
- int indexOf(Object o)
- int lastIndexOf(Object o)
- boolean contains(Object o)
- Object get(int index) :
index에 있는 객체
읽기
그 외
- Object set(int index, Object element) :
index에 있는 객체
변경
- List subList(int fromIndex, int toIndex)
- Object[] toArray() :
ArrayList
의 객체 배열
을 반환
- Object[] toArray(Object a)
- boolean isEmpty()
- void trimToSize() :
빈 공간 제거
- int size()
[ LinkedList ]
[ Stack ]
설명
LIFO
구조
Java
에서 Stack
은 클래스
라서 바로 생성해서 사용 가능
Stack s = new Stack();
s.push(1);
s.push(2);
s.pop();
메서드
- peek() :
맨 위 객체
읽기
- search() :
특정 객체의 위치
를 반환
/ 없으면 -1
반환
[ Queue ]
설명
FIFO
구조
Java
에서 Queue
는 인터페이스
라서 직접 생성할 수 없음
- 직접 구현 -->
실제로는 잘 사용하지 X
- Queue를 구현한 클래스를 사용
- LinkedList :
주로 Queue를 사용
할 때 LinkedList
로 자주 사용
- PriorityQueue
- 등 매우 많음
Queue q = new LinkedList();
q.offer(1);
q.offer(2);
q.poll();
메서드
- 똑같은
추가/삭제 기능
이지만 예외 발생 여부
로 나뉜다
- 보통
예외 없이
poll()
/ offer()
로 사용
Set 인터페이스
[ 정보 ]
설명
순서
가 없으며
, 데이터의 중복
을 허용하지 않음
Collection 인터페이스
의 자손
- ex) 양의 정수 집합
- 구조
HashSet
/ TreeSet
이 핵심
메서드
Collection
과 동일
하며 아래 특징
을 기억하면 좋음
: 합집합
/ 부분집합
/ 차집합
/ 교집합
[ HashSet ]
설명
Set 인터페이스
를 구현
한 대표적인 컬렉션 클래스
- 순서 X
순서가 없기 때문
에 정렬 불가능
--> 정렬
하려면 List로 옮겨서
정렬 수행
- 중복 X
중복이 없어야 하기 때문
에 내가 만든 객체를 저장
할 때에는
euqlas()
/ hashCode()
를 오버라이딩
해야 정상 동작
함
순서를 유지
하려면, LinkedHashSet 클래스
사용하면 됨
TreeSet
은 범위 검색
과 정렬
에 유리
하지만, 데이터 추가
/ 삭제
에 불리
생성자
- HashSet()
- HashSet(Collection c)
- HashSet(int initialCapacity)
- HashSet(int initialCapacity, float loadFactor)
: loadFactor 이 0.8
이면 80%
가 되었을 때 capacity를 늘리도록 설정
추가
- boolean add(Object o) :
추가
- boolean addAll(Collection c) :
합집합
삭제
- boolean remove(Object o)
- boolean removeAll(Collection c) :
교집합(공통된 것 삭제)
- boolean retainAll(Collection c) :
차집합(포함되는 것 삭제)
- void clear() :
모두 삭제
그 외
- boolean contains(Object o)
- boolean containsAll(Collection c) :
모두 포함
되어있는지 확인
- Iterator iterator()
- boolean isEmpty()
- int size()
- Object[] toArray() :
set에 저장되어 있는 객체
를 객체 배열
로 반환
- Object[] ToArray(Object[] a)
[ TreeSet / LinkedHashSet ]
TreeSet
이진 검색 트리
자료구조의 형태
로 데이터를 저장
하는 컬렉션 클래스
추가와 삭제
에는 시간이 더 걸리지만
, 정렬, 검색
에 높은 성능
을 가짐
Red-Black 트리
로 구현
되어 있다
- 필요시
관련 메서드
를 찾아보자
LinkedHashSet
HashSet
과 동일한 구조
데이터 요소
들이 순서를 가짐
- 필요시
관련 메서드
를 찾아보자
Map 인터페이스
[ 정보 ]
설명
키(key)
와 값(value)
의 쌍(pair)
으로 이루어진 데이터의 집합
순서
가 없으며
, 키
는 중복을 허용하지 않고
, 값
은 중복을 허용
HashMap
/ TreeMap
/ Hashtable
/ Properties
등
- ex) 아이디-비밀번호
- 구조
HashMap
/ TreeMap
이 핵심
Hashtable
과 HashMap
은 매우 유사
하며, HashMap
이 개선된 것
메서드
[ HashMap ]
설명
Hashtable
의 개선버전
배열
과 링크드 리스트
가 조합된 형태
해싱(hashing) 기법
으로 데이터 저장
해서 검색이 빠르다
key
와 value
로 이루어진 하나의 쌍(pair)
로 저장 / 하나의 쌍
을 entry
라고 함
- List 인터페이스를 구현한 대표적인 클래스
순서 X
value
만 중복
O
순서
를 유지
하려면, LinkedHashMap 클래스
를 사용
TreeMap
은 범위검색
과 정렬
에 유리
/ 데이터 추가
, 삭제
는 불리
생성자
- HashMap()
- HashMap(int initialCapacity)
- HashMap(int initialCapacity, float loadFactor)
- HashMap(Map m)
추가
- Object put(Object key, Object value)
: 이미 있는 key값
을 넣으면 변경
이 수행됨
- void putAll(Map m)
삭제
- Object remove(Object key)
변경
- Object replace(Object key, Object value) :
key에 저장
된 value
를 새로운 value
로 수정
- boolean replace(Object key, Object oldValue, Object newValue)
그 외
- Set entrySet() :
entry들 조회
- Set keySet() :
key들 조회
- Collection values() :
value들 조회
- Object get(Object key)
- Object getOrDefault(Object key, Obejct defaultValue)
: key
의 value
를 조회
하는데, 없는 key
면 defaultValue
를 반환
- boolean containsKey(Object key)
- boolean containsValue(Object value)
- int size()
- boolean isEmpty()
- void clear()
- object clone()
[ TreeMap / LinkedHashMap ]
TreeMap
이진트리
를 기반
으로 한 Map 컬렉션 클래스
TreeSet과 유사
하지만 key뿐
만 아니라 value도 저장
정렬된 상태
에서 데이터를 조회
해야 하는 범위 검색
에 성능이 좋음
- 역시
Red-Black 트리
로 구현
- 필요시
관련 메서드
를 찾아보자
LinkedHashMap
HashMap
을 확장하는 클래스
데이터 요소
들 간 순서
를 가짐
- 필요시
관련 메서드
를 찾아보자
Iterator & Enumeration & ListIterator
[ 정보 ]
Iterator
컬렉션에 저장된 요소
를 읽어오는 방법
을 표준화
한 것
각 컬렉션
마다 읽어오는 방법이 달라서
표준화해서 사용
하면 편함
Enumeration & ListIterator
Enumeration
은 Iterator의 구버전
--> Iterator를 쓰면 됨
ListIterator
는 List에서 사용하는 Iterator
로 previous
도 있지만 잘 사용하지는 않음
(양방향
)
핵심 메서드
- 종류
- boolean hasNext() :
읽어올 요소
가 남아있는지 확인
- Object next() :
다음 요소
를 읽어옴
- 사용
Collection 인터페이스
에 있는 iterator() 메소드
를 통해서 받아올 수 있음
iter.hashNext()
로 다음 요소가 존재하는지 확인
한 뒤 iter.next()
로 값에 접근
ArrayList<Integer> list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
/* iterator는 1회용이라서 다시 순회하려면 다시 iterator를 생성해야 한다 */
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
[ Map과 Iterator ]
Map
은 Collection 인터페이스
의 자손이 아님
Map
에는 iterator가 없다
keySet()
/ entySet()
/ values()
를 통해서 요소에 접근
해야 한다
Map<String, String> cities = new HashMap<>();
cities.put("Tokyo", "Japan");
cities.put("Seoul", "Korea");
cities.put("Beijing", "China");
/* iterator 사용 */
for(Map.Entry<String, String> enty : cities.entySet()){
System.out.println(entry.getKey() + entry.getValue());
}
/* java 8의 forEach + Lambda 사용 */
cities.forEach((k, v) -> System.out.println(k + v));
유틸 클래스(Util Class)
[ Arrays ]
설명
배열
을 다루기 위한 메서드(static) 제공
하는 유틸 클래스
- 배열의 출력 :
toString()
- 배열의 복사 :
copyOf()
/ copyOfRange()
- 배열 채우기 :
fill()
/ setAll()
- 배열의 정렬과 검색 :
sort()
/ binarySearch()
다차원 배열
- 출력 :
deepToString()
- 비교 :
deepEquals()
(2차월 배열
에 기본적인 equals()
는 정상 동작하지 X
)
배열 --> List 변환
asList()
반환 값
은 읽기 전용
이기 때문에 변경을 하려면
새로 할당
필요
사용 예시
/* toString() */
int[] arr = {1, 2, 3, 4, 5};
Arrays.toString(arr); // [1, 2, 3, 4, 5] 로 출력
/* copyOf() copyOfRange() */
int[] arr = {0,1,2,3,4};
int[] arr2 = Arrays.copyOf(arr, arr.length); // arr의 전체를 복사
int[] arr3 = Arrays.copyOfRange(arr, 2, 4) // arr의 2~3인덱스 까지 복사
/* fill() setAll() */
int[] arr = new int[5];
Arrays.fill(arr, 9); // 9로 채우기
Arrays.setAll(arr, (i) -> (int)(Math.random()*5+1)); // 1~5의 랜덤값으로 채우기
/* sort() binarySearch() */
int[] arr = {3, 2, 0, 1, 4};
Arrays.sort(arr); // 오름차순 정렬
Arrays.binarySearch(arr, 2); // 이진탐색은 정렬 후에 정상 동작함 --> idx=2 결과
/* deepToString() deepEquals() */
String[][] str2D = new String[][]{{"abc", "def"}, {"ABC", "DEF"}};
String[][] str2D2 = new String[][]{{"abc", "def"}, {"ABC", "DEF"}};
Arrays.deepToString(arr2D); // [["abc", "def"], ["ABC", "DEF"]]
Arrays.deepEquals(std2D, str2D2); // true
/* asList() */
List list = Array.asList(new Integer[]{1,2,3,4,5});
list.add(6); // 예외 발생 --> 읽기전용이기 때문
// 아래처럼 값을 가진 새로운 List를 할당해야 변경 가능
List list = new ArrayList(Arrays.asList(new Integer[]{1,2,3,4,5}));
[ Collections ]
설명
컬렉션
을 다루기 위한 메서드(static)
제공하는 유틸 클래스
내림차순 정렬
시 Collections.reverseOrder()
를 통해 Comparator
을 사용
- 컬렉션 채우기 :
fill()
- 컬렉션 복사 :
copy()
- 컬렉션 정렬 :
sort()
- 컬렉션 탐색 :
binarySearch()
컬렉션 동기화 - synchronizedXXX()
기존
에는 항상 동기화를 수행
했으나, 이제는 default로 동기화를 수행하지 않고
, 필요할 때 사용
하는 방식
--> Vector
대신 ArrayList
처럼
synchronizedList(List list)
synchronizedSet(Set s)
synchronizedMap(Map m)
- 등
변경 불가 컬렉션 만들기 - unmodifiableXXX()
반환값
으로 읽기 전용 객체
가 만들어짐
unmodifiableList(List list)
unmodifiableSet(Set s)
unmodifiableMap(Map m)
- 등
싱글톤 컬렉션 만들기 - singletonXXX()
1개의 인스턴스
만 만들어짐
singletonList(List list)
singletonSet(Set s)
singletonMap(Map m)
- 등
한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()
- 사실
Java 8
부터는 제네릭스(Generics)
가 있어서 사용할 일은 없음
존재 여부만 확인
기타
rotate()
swap()
shffle()
- 등등
컬렉션 클래스 정리 & 요약
[ 전체 흐름 ]
Collection Framework
의 주요 인터페이스
로 List / Set / Map
이 존재
- 그 중
List / Set 인터페이스
는 Collection 인터페이스
를 상속
받음
[ List ]
- ArrayList
배열 기반
의 리스트
Vector
와 다르게 동기화를 자동으로 하지 X
--> 효율적
- Vector
표준화 되기 전 사용
되던 것 --> 지금은 ArrayList 사용
자동으로 동기화 기능
이 존재 --> 비효율적
- Stack
LIFO 구조
의 stack
을 구현한 클래스
- Vector를 이용해 구현됨
- LinkedList
ArrayList
의 단점을 극복
삽입 / 삭제
는 유용
하지만, 탐색
은 ArrayList
에 비해 불리
- Queue
queue 자료구조
를 의미하는 인터페이스
LinkedList를
구현체
로 자주 사용
[ Set ]
- HashSet
HashMap을 가지고 만들었으며
, key만 있는 HashMap
이라고 볼 수 있음
- TreeSet
TreeMap을 가지고 만들었으며
, key만 있는 TreeMap
이라고 볼 수 있음
- LinkedHashSet
순서가 필요
한 HashSet
[ Map ]
- HashMap
배열
+ 링크드 리스트
의 구조
(key, value)
로 이루어진 entry
를 가짐
- Hashtable
HashMap
의 과거 버전
- TreeMap
이진트리 구조
를 가짐
범위검색
/ 정렬 기능
측면에서 용이
데이터 삽입/삭제
는 HashMap
이 더 용이
- Properties
(String, String)
만 가지는 HashMap
파일 읽기 / 쓰기
에 용이
- LinkedHashMap
순서가 필요
한 HashMap
Author And Source
이 문제에 관하여(Java 기본 (6) - Collection(List / Set / Map) / Iterator / 유틸 클래스(Arrays, Collections)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/Java-기본-6-CollectionList-Set-Map-Iterator-유틸-클래스Arrays-Collections
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
컬렉션 프레임워크(Collection Framework)
컬렉션(다수의 객체)
을 다루기 위한표준화된 프로그래밍 방식
컬렉션
을쉽고 편리하게 다룰 수 있는
다양한 클래스
제공
(저장
삭제
검색
정렬
등)
컬렉션 클래스
다수의 데이터
를저장
할 수 있는클래스
- ex)
Vector
,ArrayList
,HashSet
등
[ 정보 ]
설명
순서
가있으며
,데이터의 중복
을허용
Collection 인터페이스
의자손
ArrayList
/LinkedList
/Stack
/Vector
등ArrayList
와LinkedList
가 핵심- ex) 대기자 명단
구조
주요 메서드
[ ArrayList ]
설명
- 기존의
Vector
를개선한 것
으로구현원리
와기능적
으로동일
Vector
는동기화 처리 O
/ArrayList
는동기화 처리 X
List 인터페이스
를 구현 -->순서 O
/중복 O
데이터 저장공간
으로배열
을 사용(배열 기반
)데이터
는Object
만 가능 --> 즉,객체
만가능
기본형(primitive type)
을 넣어도 되긴함 -->컴파일러
가오토박싱
을 해주기 때문정렬
을 할때에는Collections
라는유틸 클래스
를 통해 수행
- 오름차순 :
Collections.sort(list)
- 내림차순 :
Collections.sort(list, Collections.reverseOrder())
- 모든 객체 삭제시 유의
- 첫번째 요소부터 삭제 :
배열 복사 발생 O
-->비효율적
- 마지막 요소부터 삭제 :
배열 복사 발생 X
-->훨씬 효율적
생성자
- ArrayList() :
기본 생성자
- ArrayList(Collection c) :
컬렉션
으로초기화
- ArrayLis(int initialCapacity) :
배열의 길이 지정
추가
- boolean add(Object o) :
맨 뒤에 삽입
- void add(int index, Object element) :
특정 위치
에삽입
- boolean addAll(Collection c)
- boolean addAll(int index, Collection c)
삭제
- boolean remove(Object o) :
해당 객체 삭제
- Object remove(int index) :
특정 위치에 있는 객체
삭제
- boolean removeAll(Collection c) :
collection에 있는 객체
들삭제
- void clear() :
모든 객체 삭제
검색
- int indexOf(Object o)
- int lastIndexOf(Object o)
- boolean contains(Object o)
- Object get(int index) :
index에 있는 객체
읽기
그 외
- Object set(int index, Object element) :
index에 있는 객체
변경
- List subList(int fromIndex, int toIndex)
- Object[] toArray() :
ArrayList
의객체 배열
을반환
- Object[] toArray(Object a)
- boolean isEmpty()
- void trimToSize() :
빈 공간 제거
- int size()
[ LinkedList ]
[ Stack ]
설명
LIFO
구조Java
에서Stack
은클래스
라서바로 생성해서 사용 가능
Stack s = new Stack(); s.push(1); s.push(2); s.pop();
메서드
- peek() :
맨 위 객체
읽기
- search() :
특정 객체의 위치
를반환
/없으면 -1
반환
[ Queue ]
설명
FIFO
구조Java
에서Queue
는인터페이스
라서직접 생성할 수 없음
- 직접 구현 -->
실제로는 잘 사용하지 X
- Queue를 구현한 클래스를 사용
- LinkedList :
주로 Queue를 사용
할 때LinkedList
로 자주사용
- PriorityQueue
- 등 매우 많음
Queue q = new LinkedList(); q.offer(1); q.offer(2); q.poll();
메서드
- 똑같은
추가/삭제 기능
이지만예외 발생 여부
로나뉜다
- 보통
예외 없이
poll()
/offer()
로사용
Set 인터페이스
[ 정보 ]
설명
순서
가 없으며
, 데이터의 중복
을 허용하지 않음
Collection 인터페이스
의 자손
- ex) 양의 정수 집합
- 구조
HashSet
/ TreeSet
이 핵심
메서드
Collection
과 동일
하며 아래 특징
을 기억하면 좋음
: 합집합
/ 부분집합
/ 차집합
/ 교집합
[ HashSet ]
설명
Set 인터페이스
를 구현
한 대표적인 컬렉션 클래스
- 순서 X
순서가 없기 때문
에 정렬 불가능
--> 정렬
하려면 List로 옮겨서
정렬 수행
- 중복 X
중복이 없어야 하기 때문
에 내가 만든 객체를 저장
할 때에는
euqlas()
/ hashCode()
를 오버라이딩
해야 정상 동작
함
순서를 유지
하려면, LinkedHashSet 클래스
사용하면 됨
TreeSet
은 범위 검색
과 정렬
에 유리
하지만, 데이터 추가
/ 삭제
에 불리
생성자
- HashSet()
- HashSet(Collection c)
- HashSet(int initialCapacity)
- HashSet(int initialCapacity, float loadFactor)
: loadFactor 이 0.8
이면 80%
가 되었을 때 capacity를 늘리도록 설정
추가
- boolean add(Object o) :
추가
- boolean addAll(Collection c) :
합집합
삭제
- boolean remove(Object o)
- boolean removeAll(Collection c) :
교집합(공통된 것 삭제)
- boolean retainAll(Collection c) :
차집합(포함되는 것 삭제)
- void clear() :
모두 삭제
그 외
- boolean contains(Object o)
- boolean containsAll(Collection c) :
모두 포함
되어있는지 확인
- Iterator iterator()
- boolean isEmpty()
- int size()
- Object[] toArray() :
set에 저장되어 있는 객체
를 객체 배열
로 반환
- Object[] ToArray(Object[] a)
[ TreeSet / LinkedHashSet ]
TreeSet
이진 검색 트리
자료구조의 형태
로 데이터를 저장
하는 컬렉션 클래스
추가와 삭제
에는 시간이 더 걸리지만
, 정렬, 검색
에 높은 성능
을 가짐
Red-Black 트리
로 구현
되어 있다
- 필요시
관련 메서드
를 찾아보자
LinkedHashSet
HashSet
과 동일한 구조
데이터 요소
들이 순서를 가짐
- 필요시
관련 메서드
를 찾아보자
Map 인터페이스
[ 정보 ]
설명
키(key)
와 값(value)
의 쌍(pair)
으로 이루어진 데이터의 집합
순서
가 없으며
, 키
는 중복을 허용하지 않고
, 값
은 중복을 허용
HashMap
/ TreeMap
/ Hashtable
/ Properties
등
- ex) 아이디-비밀번호
- 구조
HashMap
/ TreeMap
이 핵심
Hashtable
과 HashMap
은 매우 유사
하며, HashMap
이 개선된 것
메서드
[ HashMap ]
설명
Hashtable
의 개선버전
배열
과 링크드 리스트
가 조합된 형태
해싱(hashing) 기법
으로 데이터 저장
해서 검색이 빠르다
key
와 value
로 이루어진 하나의 쌍(pair)
로 저장 / 하나의 쌍
을 entry
라고 함
- List 인터페이스를 구현한 대표적인 클래스
순서 X
value
만 중복
O
순서
를 유지
하려면, LinkedHashMap 클래스
를 사용
TreeMap
은 범위검색
과 정렬
에 유리
/ 데이터 추가
, 삭제
는 불리
생성자
- HashMap()
- HashMap(int initialCapacity)
- HashMap(int initialCapacity, float loadFactor)
- HashMap(Map m)
추가
- Object put(Object key, Object value)
: 이미 있는 key값
을 넣으면 변경
이 수행됨
- void putAll(Map m)
삭제
- Object remove(Object key)
변경
- Object replace(Object key, Object value) :
key에 저장
된 value
를 새로운 value
로 수정
- boolean replace(Object key, Object oldValue, Object newValue)
그 외
- Set entrySet() :
entry들 조회
- Set keySet() :
key들 조회
- Collection values() :
value들 조회
- Object get(Object key)
- Object getOrDefault(Object key, Obejct defaultValue)
: key
의 value
를 조회
하는데, 없는 key
면 defaultValue
를 반환
- boolean containsKey(Object key)
- boolean containsValue(Object value)
- int size()
- boolean isEmpty()
- void clear()
- object clone()
[ TreeMap / LinkedHashMap ]
TreeMap
이진트리
를 기반
으로 한 Map 컬렉션 클래스
TreeSet과 유사
하지만 key뿐
만 아니라 value도 저장
정렬된 상태
에서 데이터를 조회
해야 하는 범위 검색
에 성능이 좋음
- 역시
Red-Black 트리
로 구현
- 필요시
관련 메서드
를 찾아보자
LinkedHashMap
HashMap
을 확장하는 클래스
데이터 요소
들 간 순서
를 가짐
- 필요시
관련 메서드
를 찾아보자
Iterator & Enumeration & ListIterator
[ 정보 ]
Iterator
컬렉션에 저장된 요소
를 읽어오는 방법
을 표준화
한 것
각 컬렉션
마다 읽어오는 방법이 달라서
표준화해서 사용
하면 편함
Enumeration & ListIterator
Enumeration
은 Iterator의 구버전
--> Iterator를 쓰면 됨
ListIterator
는 List에서 사용하는 Iterator
로 previous
도 있지만 잘 사용하지는 않음
(양방향
)
핵심 메서드
- 종류
- boolean hasNext() :
읽어올 요소
가 남아있는지 확인
- Object next() :
다음 요소
를 읽어옴
- 사용
Collection 인터페이스
에 있는 iterator() 메소드
를 통해서 받아올 수 있음
iter.hashNext()
로 다음 요소가 존재하는지 확인
한 뒤 iter.next()
로 값에 접근
ArrayList<Integer> list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
/* iterator는 1회용이라서 다시 순회하려면 다시 iterator를 생성해야 한다 */
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
[ Map과 Iterator ]
Map
은 Collection 인터페이스
의 자손이 아님
Map
에는 iterator가 없다
keySet()
/ entySet()
/ values()
를 통해서 요소에 접근
해야 한다
Map<String, String> cities = new HashMap<>();
cities.put("Tokyo", "Japan");
cities.put("Seoul", "Korea");
cities.put("Beijing", "China");
/* iterator 사용 */
for(Map.Entry<String, String> enty : cities.entySet()){
System.out.println(entry.getKey() + entry.getValue());
}
/* java 8의 forEach + Lambda 사용 */
cities.forEach((k, v) -> System.out.println(k + v));
유틸 클래스(Util Class)
[ Arrays ]
설명
배열
을 다루기 위한 메서드(static) 제공
하는 유틸 클래스
- 배열의 출력 :
toString()
- 배열의 복사 :
copyOf()
/ copyOfRange()
- 배열 채우기 :
fill()
/ setAll()
- 배열의 정렬과 검색 :
sort()
/ binarySearch()
다차원 배열
- 출력 :
deepToString()
- 비교 :
deepEquals()
(2차월 배열
에 기본적인 equals()
는 정상 동작하지 X
)
배열 --> List 변환
asList()
반환 값
은 읽기 전용
이기 때문에 변경을 하려면
새로 할당
필요
사용 예시
/* toString() */
int[] arr = {1, 2, 3, 4, 5};
Arrays.toString(arr); // [1, 2, 3, 4, 5] 로 출력
/* copyOf() copyOfRange() */
int[] arr = {0,1,2,3,4};
int[] arr2 = Arrays.copyOf(arr, arr.length); // arr의 전체를 복사
int[] arr3 = Arrays.copyOfRange(arr, 2, 4) // arr의 2~3인덱스 까지 복사
/* fill() setAll() */
int[] arr = new int[5];
Arrays.fill(arr, 9); // 9로 채우기
Arrays.setAll(arr, (i) -> (int)(Math.random()*5+1)); // 1~5의 랜덤값으로 채우기
/* sort() binarySearch() */
int[] arr = {3, 2, 0, 1, 4};
Arrays.sort(arr); // 오름차순 정렬
Arrays.binarySearch(arr, 2); // 이진탐색은 정렬 후에 정상 동작함 --> idx=2 결과
/* deepToString() deepEquals() */
String[][] str2D = new String[][]{{"abc", "def"}, {"ABC", "DEF"}};
String[][] str2D2 = new String[][]{{"abc", "def"}, {"ABC", "DEF"}};
Arrays.deepToString(arr2D); // [["abc", "def"], ["ABC", "DEF"]]
Arrays.deepEquals(std2D, str2D2); // true
/* asList() */
List list = Array.asList(new Integer[]{1,2,3,4,5});
list.add(6); // 예외 발생 --> 읽기전용이기 때문
// 아래처럼 값을 가진 새로운 List를 할당해야 변경 가능
List list = new ArrayList(Arrays.asList(new Integer[]{1,2,3,4,5}));
[ Collections ]
설명
컬렉션
을 다루기 위한 메서드(static)
제공하는 유틸 클래스
내림차순 정렬
시 Collections.reverseOrder()
를 통해 Comparator
을 사용
- 컬렉션 채우기 :
fill()
- 컬렉션 복사 :
copy()
- 컬렉션 정렬 :
sort()
- 컬렉션 탐색 :
binarySearch()
컬렉션 동기화 - synchronizedXXX()
기존
에는 항상 동기화를 수행
했으나, 이제는 default로 동기화를 수행하지 않고
, 필요할 때 사용
하는 방식
--> Vector
대신 ArrayList
처럼
synchronizedList(List list)
synchronizedSet(Set s)
synchronizedMap(Map m)
- 등
변경 불가 컬렉션 만들기 - unmodifiableXXX()
반환값
으로 읽기 전용 객체
가 만들어짐
unmodifiableList(List list)
unmodifiableSet(Set s)
unmodifiableMap(Map m)
- 등
싱글톤 컬렉션 만들기 - singletonXXX()
1개의 인스턴스
만 만들어짐
singletonList(List list)
singletonSet(Set s)
singletonMap(Map m)
- 등
한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()
- 사실
Java 8
부터는 제네릭스(Generics)
가 있어서 사용할 일은 없음
존재 여부만 확인
기타
rotate()
swap()
shffle()
- 등등
컬렉션 클래스 정리 & 요약
[ 전체 흐름 ]
Collection Framework
의 주요 인터페이스
로 List / Set / Map
이 존재
- 그 중
List / Set 인터페이스
는 Collection 인터페이스
를 상속
받음
[ List ]
- ArrayList
배열 기반
의 리스트
Vector
와 다르게 동기화를 자동으로 하지 X
--> 효율적
- Vector
표준화 되기 전 사용
되던 것 --> 지금은 ArrayList 사용
자동으로 동기화 기능
이 존재 --> 비효율적
- Stack
LIFO 구조
의 stack
을 구현한 클래스
- Vector를 이용해 구현됨
- LinkedList
ArrayList
의 단점을 극복
삽입 / 삭제
는 유용
하지만, 탐색
은 ArrayList
에 비해 불리
- Queue
queue 자료구조
를 의미하는 인터페이스
LinkedList를
구현체
로 자주 사용
[ Set ]
- HashSet
HashMap을 가지고 만들었으며
, key만 있는 HashMap
이라고 볼 수 있음
- TreeSet
TreeMap을 가지고 만들었으며
, key만 있는 TreeMap
이라고 볼 수 있음
- LinkedHashSet
순서가 필요
한 HashSet
[ Map ]
- HashMap
배열
+ 링크드 리스트
의 구조
(key, value)
로 이루어진 entry
를 가짐
- Hashtable
HashMap
의 과거 버전
- TreeMap
이진트리 구조
를 가짐
범위검색
/ 정렬 기능
측면에서 용이
데이터 삽입/삭제
는 HashMap
이 더 용이
- Properties
(String, String)
만 가지는 HashMap
파일 읽기 / 쓰기
에 용이
- LinkedHashMap
순서가 필요
한 HashMap
Author And Source
이 문제에 관하여(Java 기본 (6) - Collection(List / Set / Map) / Iterator / 유틸 클래스(Arrays, Collections)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/Java-기본-6-CollectionList-Set-Map-Iterator-유틸-클래스Arrays-Collections
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
설명
순서
가없으며
,데이터의 중복
을허용하지 않음
Collection 인터페이스
의자손
- ex) 양의 정수 집합
- 구조
HashSet
/TreeSet
이 핵심
메서드
Collection
과동일
하며아래 특징
을 기억하면 좋음
:합집합
/부분집합
/차집합
/교집합
설명
Set 인터페이스
를구현
한대표적인 컬렉션 클래스
- 순서 X
순서가 없기 때문
에정렬 불가능
-->정렬
하려면List로 옮겨서
정렬수행
- 중복 X
중복이 없어야 하기 때문
에내가 만든 객체를 저장
할 때에는
euqlas()
/hashCode()
를오버라이딩
해야정상 동작
함
- 순서 X
순서를 유지
하려면,LinkedHashSet 클래스
사용하면 됨TreeSet
은범위 검색
과정렬
에유리
하지만,데이터 추가
/삭제
에불리
생성자
- HashSet()
- HashSet(Collection c)
- HashSet(int initialCapacity)
- HashSet(int initialCapacity, float loadFactor)
:loadFactor 이 0.8
이면80%
가 되었을 때capacity를 늘리도록 설정
추가
- boolean add(Object o) :
추가
- boolean addAll(Collection c) :
합집합
삭제
- boolean remove(Object o)
- boolean removeAll(Collection c) :
교집합(공통된 것 삭제)
- boolean retainAll(Collection c) :
차집합(포함되는 것 삭제)
- void clear() :
모두 삭제
그 외
- boolean contains(Object o)
- boolean containsAll(Collection c) :
모두 포함
되어있는지확인
- Iterator iterator()
- boolean isEmpty()
- int size()
- Object[] toArray() :
set에 저장되어 있는 객체
를객체 배열
로반환
- Object[] ToArray(Object[] a)
TreeSet
이진 검색 트리
자료구조의형태
로데이터를 저장
하는컬렉션 클래스
추가와 삭제
에는시간이 더 걸리지만
,정렬, 검색
에높은 성능
을 가짐Red-Black 트리
로구현
되어 있다- 필요시
관련 메서드
를 찾아보자
LinkedHashSet
HashSet
과동일한 구조
데이터 요소
들이순서를 가짐
- 필요시
관련 메서드
를 찾아보자
[ 정보 ]
설명
키(key)
와값(value)
의쌍(pair)
으로 이루어진데이터의 집합
순서
가없으며
,키
는중복을 허용하지 않고
,값
은중복을 허용
HashMap
/TreeMap
/Hashtable
/Properties
등- ex) 아이디-비밀번호
- 구조
HashMap
/TreeMap
이 핵심Hashtable
과HashMap
은매우 유사
하며,HashMap
이개선된 것
메서드
[ HashMap ]
설명
Hashtable
의개선버전
배열
과링크드 리스트
가조합된 형태
해싱(hashing) 기법
으로데이터 저장
해서검색이 빠르다
key
와value
로 이루어진하나의 쌍(pair)
로 저장 /하나의 쌍
을entry
라고 함- List 인터페이스를 구현한 대표적인 클래스
순서 X
value
만중복
O
순서
를유지
하려면,LinkedHashMap 클래스
를 사용TreeMap
은범위검색
과정렬
에유리
/데이터 추가
,삭제
는불리
생성자
- HashMap()
- HashMap(int initialCapacity)
- HashMap(int initialCapacity, float loadFactor)
- HashMap(Map m)
추가
- Object put(Object key, Object value)
:이미 있는 key값
을 넣으면변경
이 수행됨- void putAll(Map m)
삭제
- Object remove(Object key)
변경
- Object replace(Object key, Object value) :
key에 저장
된value
를새로운 value
로수정
- boolean replace(Object key, Object oldValue, Object newValue)
그 외
- Set entrySet() :
entry들 조회
- Set keySet() :
key들 조회
- Collection values() :
value들 조회
- Object get(Object key)
- Object getOrDefault(Object key, Obejct defaultValue)
:key
의value
를조회
하는데,없는 key
면defaultValue
를반환
- boolean containsKey(Object key)
- boolean containsValue(Object value)
- int size()
- boolean isEmpty()
- void clear()
- object clone()
[ TreeMap / LinkedHashMap ]
TreeMap
이진트리
를기반
으로 한Map 컬렉션 클래스
TreeSet과 유사
하지만key뿐
만 아니라value도 저장
정렬된 상태
에서데이터를 조회
해야 하는범위 검색
에성능이 좋음
- 역시
Red-Black 트리
로구현
- 필요시
관련 메서드
를 찾아보자
LinkedHashMap
HashMap
을확장하는 클래스
데이터 요소
들 간순서
를 가짐- 필요시
관련 메서드
를 찾아보자
Iterator & Enumeration & ListIterator
[ 정보 ]
Iterator
컬렉션에 저장된 요소
를 읽어오는 방법
을 표준화
한 것
각 컬렉션
마다 읽어오는 방법이 달라서
표준화해서 사용
하면 편함
Enumeration & ListIterator
Enumeration
은 Iterator의 구버전
--> Iterator를 쓰면 됨
ListIterator
는 List에서 사용하는 Iterator
로 previous
도 있지만 잘 사용하지는 않음
(양방향
)
핵심 메서드
- 종류
- boolean hasNext() :
읽어올 요소
가 남아있는지 확인
- Object next() :
다음 요소
를 읽어옴
- 사용
Collection 인터페이스
에 있는 iterator() 메소드
를 통해서 받아올 수 있음
iter.hashNext()
로 다음 요소가 존재하는지 확인
한 뒤 iter.next()
로 값에 접근
ArrayList<Integer> list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
/* iterator는 1회용이라서 다시 순회하려면 다시 iterator를 생성해야 한다 */
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
[ Map과 Iterator ]
Map
은 Collection 인터페이스
의 자손이 아님
Map
에는 iterator가 없다
keySet()
/ entySet()
/ values()
를 통해서 요소에 접근
해야 한다
Map<String, String> cities = new HashMap<>();
cities.put("Tokyo", "Japan");
cities.put("Seoul", "Korea");
cities.put("Beijing", "China");
/* iterator 사용 */
for(Map.Entry<String, String> enty : cities.entySet()){
System.out.println(entry.getKey() + entry.getValue());
}
/* java 8의 forEach + Lambda 사용 */
cities.forEach((k, v) -> System.out.println(k + v));
유틸 클래스(Util Class)
[ Arrays ]
설명
배열
을 다루기 위한 메서드(static) 제공
하는 유틸 클래스
- 배열의 출력 :
toString()
- 배열의 복사 :
copyOf()
/ copyOfRange()
- 배열 채우기 :
fill()
/ setAll()
- 배열의 정렬과 검색 :
sort()
/ binarySearch()
다차원 배열
- 출력 :
deepToString()
- 비교 :
deepEquals()
(2차월 배열
에 기본적인 equals()
는 정상 동작하지 X
)
배열 --> List 변환
asList()
반환 값
은 읽기 전용
이기 때문에 변경을 하려면
새로 할당
필요
사용 예시
/* toString() */
int[] arr = {1, 2, 3, 4, 5};
Arrays.toString(arr); // [1, 2, 3, 4, 5] 로 출력
/* copyOf() copyOfRange() */
int[] arr = {0,1,2,3,4};
int[] arr2 = Arrays.copyOf(arr, arr.length); // arr의 전체를 복사
int[] arr3 = Arrays.copyOfRange(arr, 2, 4) // arr의 2~3인덱스 까지 복사
/* fill() setAll() */
int[] arr = new int[5];
Arrays.fill(arr, 9); // 9로 채우기
Arrays.setAll(arr, (i) -> (int)(Math.random()*5+1)); // 1~5의 랜덤값으로 채우기
/* sort() binarySearch() */
int[] arr = {3, 2, 0, 1, 4};
Arrays.sort(arr); // 오름차순 정렬
Arrays.binarySearch(arr, 2); // 이진탐색은 정렬 후에 정상 동작함 --> idx=2 결과
/* deepToString() deepEquals() */
String[][] str2D = new String[][]{{"abc", "def"}, {"ABC", "DEF"}};
String[][] str2D2 = new String[][]{{"abc", "def"}, {"ABC", "DEF"}};
Arrays.deepToString(arr2D); // [["abc", "def"], ["ABC", "DEF"]]
Arrays.deepEquals(std2D, str2D2); // true
/* asList() */
List list = Array.asList(new Integer[]{1,2,3,4,5});
list.add(6); // 예외 발생 --> 읽기전용이기 때문
// 아래처럼 값을 가진 새로운 List를 할당해야 변경 가능
List list = new ArrayList(Arrays.asList(new Integer[]{1,2,3,4,5}));
[ Collections ]
설명
컬렉션
을 다루기 위한 메서드(static)
제공하는 유틸 클래스
내림차순 정렬
시 Collections.reverseOrder()
를 통해 Comparator
을 사용
- 컬렉션 채우기 :
fill()
- 컬렉션 복사 :
copy()
- 컬렉션 정렬 :
sort()
- 컬렉션 탐색 :
binarySearch()
컬렉션 동기화 - synchronizedXXX()
기존
에는 항상 동기화를 수행
했으나, 이제는 default로 동기화를 수행하지 않고
, 필요할 때 사용
하는 방식
--> Vector
대신 ArrayList
처럼
synchronizedList(List list)
synchronizedSet(Set s)
synchronizedMap(Map m)
- 등
변경 불가 컬렉션 만들기 - unmodifiableXXX()
반환값
으로 읽기 전용 객체
가 만들어짐
unmodifiableList(List list)
unmodifiableSet(Set s)
unmodifiableMap(Map m)
- 등
싱글톤 컬렉션 만들기 - singletonXXX()
1개의 인스턴스
만 만들어짐
singletonList(List list)
singletonSet(Set s)
singletonMap(Map m)
- 등
한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()
- 사실
Java 8
부터는 제네릭스(Generics)
가 있어서 사용할 일은 없음
존재 여부만 확인
기타
rotate()
swap()
shffle()
- 등등
컬렉션 클래스 정리 & 요약
[ 전체 흐름 ]
Collection Framework
의 주요 인터페이스
로 List / Set / Map
이 존재
- 그 중
List / Set 인터페이스
는 Collection 인터페이스
를 상속
받음
[ List ]
- ArrayList
배열 기반
의 리스트
Vector
와 다르게 동기화를 자동으로 하지 X
--> 효율적
- Vector
표준화 되기 전 사용
되던 것 --> 지금은 ArrayList 사용
자동으로 동기화 기능
이 존재 --> 비효율적
- Stack
LIFO 구조
의 stack
을 구현한 클래스
- Vector를 이용해 구현됨
- LinkedList
ArrayList
의 단점을 극복
삽입 / 삭제
는 유용
하지만, 탐색
은 ArrayList
에 비해 불리
- Queue
queue 자료구조
를 의미하는 인터페이스
LinkedList를
구현체
로 자주 사용
[ Set ]
- HashSet
HashMap을 가지고 만들었으며
, key만 있는 HashMap
이라고 볼 수 있음
- TreeSet
TreeMap을 가지고 만들었으며
, key만 있는 TreeMap
이라고 볼 수 있음
- LinkedHashSet
순서가 필요
한 HashSet
[ Map ]
- HashMap
배열
+ 링크드 리스트
의 구조
(key, value)
로 이루어진 entry
를 가짐
- Hashtable
HashMap
의 과거 버전
- TreeMap
이진트리 구조
를 가짐
범위검색
/ 정렬 기능
측면에서 용이
데이터 삽입/삭제
는 HashMap
이 더 용이
- Properties
(String, String)
만 가지는 HashMap
파일 읽기 / 쓰기
에 용이
- LinkedHashMap
순서가 필요
한 HashMap
Author And Source
이 문제에 관하여(Java 기본 (6) - Collection(List / Set / Map) / Iterator / 유틸 클래스(Arrays, Collections)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/Java-기본-6-CollectionList-Set-Map-Iterator-유틸-클래스Arrays-Collections
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Iterator
컬렉션에 저장된 요소
를읽어오는 방법
을표준화
한 것각 컬렉션
마다읽어오는 방법이 달라서
표준화해서 사용
하면편함
Enumeration & ListIterator
Enumeration
은Iterator의 구버전
-->Iterator를 쓰면 됨
ListIterator
는List에서 사용하는 Iterator
로previous
도 있지만잘 사용하지는 않음
(양방향
)
핵심 메서드
- 종류
- boolean hasNext() :
읽어올 요소
가남아있는지 확인
- Object next() :
다음 요소
를읽어옴
- boolean hasNext() :
- 사용
Collection 인터페이스
에 있는iterator() 메소드
를 통해서받아올 수 있음
iter.hashNext()
로다음 요소가 존재하는지 확인
한 뒤iter.next()
로값에 접근
ArrayList<Integer> list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
/* iterator는 1회용이라서 다시 순회하려면 다시 iterator를 생성해야 한다 */
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
Map
은Collection 인터페이스
의자손이 아님
Map
에는iterator가 없다
keySet()
/entySet()
/values()
를 통해서요소에 접근
해야 한다
Map<String, String> cities = new HashMap<>();
cities.put("Tokyo", "Japan");
cities.put("Seoul", "Korea");
cities.put("Beijing", "China");
/* iterator 사용 */
for(Map.Entry<String, String> enty : cities.entySet()){
System.out.println(entry.getKey() + entry.getValue());
}
/* java 8의 forEach + Lambda 사용 */
cities.forEach((k, v) -> System.out.println(k + v));
[ Arrays ]
설명
배열
을 다루기 위한메서드(static) 제공
하는유틸 클래스
- 배열의 출력 :
toString()
- 배열의 복사 :
copyOf()
/copyOfRange()
- 배열 채우기 :
fill()
/setAll()
- 배열의 정렬과 검색 :
sort()
/binarySearch()
다차원 배열
- 출력 :
deepToString()
- 비교 :
deepEquals()
(2차월 배열
에기본적인 equals()
는정상 동작하지 X
)
배열 --> List 변환
asList()
반환 값
은읽기 전용
이기 때문에변경을 하려면
새로 할당
필요
사용 예시
/* toString() */ int[] arr = {1, 2, 3, 4, 5}; Arrays.toString(arr); // [1, 2, 3, 4, 5] 로 출력 /* copyOf() copyOfRange() */ int[] arr = {0,1,2,3,4}; int[] arr2 = Arrays.copyOf(arr, arr.length); // arr의 전체를 복사 int[] arr3 = Arrays.copyOfRange(arr, 2, 4) // arr의 2~3인덱스 까지 복사 /* fill() setAll() */ int[] arr = new int[5]; Arrays.fill(arr, 9); // 9로 채우기 Arrays.setAll(arr, (i) -> (int)(Math.random()*5+1)); // 1~5의 랜덤값으로 채우기 /* sort() binarySearch() */ int[] arr = {3, 2, 0, 1, 4}; Arrays.sort(arr); // 오름차순 정렬 Arrays.binarySearch(arr, 2); // 이진탐색은 정렬 후에 정상 동작함 --> idx=2 결과 /* deepToString() deepEquals() */ String[][] str2D = new String[][]{{"abc", "def"}, {"ABC", "DEF"}}; String[][] str2D2 = new String[][]{{"abc", "def"}, {"ABC", "DEF"}}; Arrays.deepToString(arr2D); // [["abc", "def"], ["ABC", "DEF"]] Arrays.deepEquals(std2D, str2D2); // true /* asList() */ List list = Array.asList(new Integer[]{1,2,3,4,5}); list.add(6); // 예외 발생 --> 읽기전용이기 때문 // 아래처럼 값을 가진 새로운 List를 할당해야 변경 가능 List list = new ArrayList(Arrays.asList(new Integer[]{1,2,3,4,5}));
[ Collections ]
설명
컬렉션
을 다루기 위한메서드(static)
제공하는유틸 클래스
내림차순 정렬
시Collections.reverseOrder()
를 통해Comparator
을 사용- 컬렉션 채우기 :
fill()
- 컬렉션 복사 :
copy()
- 컬렉션 정렬 :
sort()
- 컬렉션 탐색 :
binarySearch()
컬렉션 동기화 - synchronizedXXX()
기존
에는항상 동기화를 수행
했으나, 이제는default로 동기화를 수행하지 않고
,필요할 때 사용
하는 방식
-->Vector
대신ArrayList
처럼synchronizedList(List list)
synchronizedSet(Set s)
synchronizedMap(Map m)
- 등
변경 불가 컬렉션 만들기 - unmodifiableXXX()
반환값
으로읽기 전용 객체
가 만들어짐unmodifiableList(List list)
unmodifiableSet(Set s)
unmodifiableMap(Map m)
- 등
싱글톤 컬렉션 만들기 - singletonXXX()
1개의 인스턴스
만만들어짐
singletonList(List list)
singletonSet(Set s)
singletonMap(Map m)
- 등
한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()
- 사실
Java 8
부터는제네릭스(Generics)
가 있어서사용할 일은 없음
존재 여부만 확인
기타
rotate()
swap()
shffle()
- 등등
컬렉션 클래스 정리 & 요약
[ 전체 흐름 ]
Collection Framework
의 주요 인터페이스
로 List / Set / Map
이 존재
- 그 중
List / Set 인터페이스
는 Collection 인터페이스
를 상속
받음
[ List ]
- ArrayList
배열 기반
의 리스트
Vector
와 다르게 동기화를 자동으로 하지 X
--> 효율적
- Vector
표준화 되기 전 사용
되던 것 --> 지금은 ArrayList 사용
자동으로 동기화 기능
이 존재 --> 비효율적
- Stack
LIFO 구조
의 stack
을 구현한 클래스
- Vector를 이용해 구현됨
- LinkedList
ArrayList
의 단점을 극복
삽입 / 삭제
는 유용
하지만, 탐색
은 ArrayList
에 비해 불리
- Queue
queue 자료구조
를 의미하는 인터페이스
LinkedList를
구현체
로 자주 사용
[ Set ]
- HashSet
HashMap을 가지고 만들었으며
, key만 있는 HashMap
이라고 볼 수 있음
- TreeSet
TreeMap을 가지고 만들었으며
, key만 있는 TreeMap
이라고 볼 수 있음
- LinkedHashSet
순서가 필요
한 HashSet
[ Map ]
- HashMap
배열
+ 링크드 리스트
의 구조
(key, value)
로 이루어진 entry
를 가짐
- Hashtable
HashMap
의 과거 버전
- TreeMap
이진트리 구조
를 가짐
범위검색
/ 정렬 기능
측면에서 용이
데이터 삽입/삭제
는 HashMap
이 더 용이
- Properties
(String, String)
만 가지는 HashMap
파일 읽기 / 쓰기
에 용이
- LinkedHashMap
순서가 필요
한 HashMap
Author And Source
이 문제에 관하여(Java 기본 (6) - Collection(List / Set / Map) / Iterator / 유틸 클래스(Arrays, Collections)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/Java-기본-6-CollectionList-Set-Map-Iterator-유틸-클래스Arrays-Collections
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Collection Framework
의주요 인터페이스
로List / Set / Map
이 존재- 그 중
List / Set 인터페이스
는Collection 인터페이스
를상속
받음
- ArrayList
배열 기반
의리스트
Vector
와 다르게동기화를 자동으로 하지 X
-->효율적
- Vector
표준화 되기 전 사용
되던 것 --> 지금은ArrayList 사용
자동으로 동기화 기능
이 존재 -->비효율적
- Stack
LIFO 구조
의stack
을 구현한클래스
- Vector를 이용해 구현됨
- LinkedList
ArrayList
의단점을 극복
삽입 / 삭제
는유용
하지만,탐색
은ArrayList
에 비해불리
- Queue
queue 자료구조
를 의미하는인터페이스
LinkedList를
구현체
로 자주사용
- HashSet
HashMap을 가지고 만들었으며
,key만 있는 HashMap
이라고 볼 수 있음
- TreeSet
TreeMap을 가지고 만들었으며
,key만 있는 TreeMap
이라고 볼 수 있음
- LinkedHashSet
순서가 필요
한HashSet
- HashMap
배열
+링크드 리스트
의구조
(key, value)
로 이루어진entry
를 가짐
- Hashtable
HashMap
의과거 버전
- TreeMap
이진트리 구조
를 가짐범위검색
/정렬 기능
측면에서용이
데이터 삽입/삭제
는HashMap
이더 용이
- Properties
(String, String)
만 가지는HashMap
파일 읽기 / 쓰기
에용이
- LinkedHashMap
순서가 필요
한HashMap
Author And Source
이 문제에 관하여(Java 기본 (6) - Collection(List / Set / Map) / Iterator / 유틸 클래스(Arrays, Collections)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@neity16/Java-기본-6-CollectionList-Set-Map-Iterator-유틸-클래스Arrays-Collections저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)