# 컬렉션프레임워크 : 자주사용하는 자료구조를 다 구현해놓음
* List : 데이터의 순서가 유지, 중복저장 가능 // Collection인터페이스
- ArrayList, Vector, Stack, LinkedList
* Set : 데이터 순서유지x, 중복저장x // Collection 인터페이스
- HashSet, TreeSet
* Map : 키와 값의 쌍으로 데이터를 저장 / 순서유지x, Key 중복저장x Value 중복저장 가능
- HashMap, HashTable, TreeMap, properties
* Collection 인터페이스 : List/Set의 공통점을 정의한 인터페이스
- boolean / add(), addAll() // 컬렉션 추가
- boolean / contains(), containsAll() // 주어진 객체 및 컬렉션 저장여부 리턴
- Iterator / iterator() //컬렉션의 iterator를 리턴
- boolean / equals(Object o) //컬렉션이 동일한지 여부를 확인
- boolean // isEmpty() 컬렉션이 비어있는지 여부를 확인
- int / size() // 저장되어 있는 전체 객체 수를 리턴
- void / clear() // 컬렉션에 저장된 모든 객체를 삭제
- boolean / remove(Object o) / removeAll(Collection c) // 주어진 객체 및 컬렉션을 삭제하고 성공 여부를 리턴
- boolean / retainAll(Collection c) // 주어진 컬렉션을 제외한 모든 객체를 컬렉션에서 삭제하고, 컬렉션에 변화가 있는지의 여부를 리턴
- Object[] / toArray() // 컬렉션에 저장된 객체를 객체배열(Object [])로 반환
- Object[] / toArray(Object[] a) // 주어진 배열에 컬렉션의 객체를 저장해서 반환
* List<E> : 객체를 저장하면 자동으로 인덱스 부여, 검색/추가/삭제 등 기능제공
- add(int index, Object element)// 주어진 인덱스에 객체를 추가
- addAll(int index, Collection c)// 주어진 인덱스에 컬렉션을 추가
- set(int index, Object element)// 주어진 위치에 객체를 저장
- get(int index)// 주어진 인덱스에 저장된 객체를 반환
- indexOf(Object o) / lastIndexOf(Object o)// 순방향 / 역방향으로 탐색하여 주어진 객체의 위치를 반환
- listIterator() / listIterator(int index)// List의 객체를 탐색할 수 있는ListIterator 반환 / 주어진 index부터 탐색할 수 있는 ListIterator 반환
- subList(int fromIndex, int toIndex)// fromIndex부터 toIndex에 있는 객체를 반환
- remove(int index) // 주어진 인덱스에 저장된 객체를 삭제하고 삭제된 객체를 반환
- remove(Object o)// 주어진 객체를 삭제
- sort(Comparator c)// 주어진 비교자(comparator)로 List를 정렬
* ArrayList<String> arrayList = new ArrayList<>(); : 객체만 저장할 수 있음 / 스스로 크기를 늘려줌 // 배열타입
- arrayList.add("Hello"); // 문자열 추가
- arrayList.get(0); // 첫번째 추가된값 리턴
- for(String el : arrayList) sout("el = " +el); // 배열 순회
- ArrayList.clear() // 담겨있는 모든 객체 삭제
* LinkedList : 데이터를 효율적으로 추가/삭제/변경하기위해 사용
- 배열과 달리 불연속적으로 존재, 데이터끼리 연결되어있음
- 배열처럼 데이터를 이동하기 위해 복사할 필요 없어 처리속도가 훨씬 빠름
* ArrayList / LinkedList 차이
- 데이터의 잦은 변경이 예상된다면 LinkedList 사용
- 데이터의 개수가 변하지 않는다면 ArrayList사용 // 데이터 검색이 비교적 빠름
* Iterator : 컬렉션에 저장된 요소들을 순차적으로 읽어오는 역할
- hasNext()// 읽어올 객체가 남아 있으면 true를 리턴하고, 없으면 false를 리턴
- next()// 컬렉션에서 하나의 객체를 읽어옵니다. 이 때, next()를 호출하기 전에 hasNext()를 통해 읽어올 다음 요소가 있는지 먼저 확인
- remove()// next()를 통해 읽어온 객체를 삭제합니다. next()를 호출한 다음에 remove()를 호출
- 사용법
ArrayList<String> list = ...;
Iterator<String> iterator = list.iterator(); // 해당 컬렉션과 같은 타입이어야함(String)
while(iterator.hasNext()) { // 읽어올 다음 객체가 있다면
String str = iterator.next(); }// next() 를 통해 다음 객체를 읽어옵니다.
- Iterator 사용없이 for-each문으로 대체 가능
ArrayList<String> list = ...;
for(String str : list) {
*Set<E> : 중복을 허용하지 않고 저장순서를 유지하지 않는 컬렉션
- boolean / add(Object o)// 주어진 객체를 추가하고, 성공하면 true를, 중복 객체면 false를 반환합니다.
- boolean / contains(Object o)// 주어진 객체가 Set에 존재하는지 확인합니다.
- boolean / isEmpty()// Set이 비어있는지 확인합니다.
- Iterator / Iterator()// 저장된 객체를 하나씩 읽어오는 반복자를 리턴합니다.
- int / size()// 저장되어 있는 전체 객체의 수를 리턴합니다.
- void / clear()// Set에 저장되어져 있는 모든 객체를 삭제합니다.
- boolean / remove(Object o)// 주어진 객체를 삭제합니다.
* HashSet
- iterator을 이용해 요소 출력가능
*TreeSet : 이진탐색 트리형태로 저장
- 하나의 부모 노드가 최대 두 개의 자식 노드와 연결되는 이진 트리(Binary Tree)의 일종으로, 정렬과 검색에 특화된 자료 구조
- 최상위 노드를 루트라고 함
- 모든 왼쪽 자식의 값이 루트나 부모보다 작고 오든 오른쪽 자식의 값이 루트나 부모보다 큰값을 가짐
* Map<K, V>
- Entry객체는 키와 값을 각각 Key 객체와 Value객체로 저장
- object / put(Object key, Object value) // 주어진 키로 값을 저장합니다. 해당 키가 새로운 키일 경우 null을 리턴하지만, 동일한 키가 있을 경우에는 기존의 값을 대체하고 대체되기 이전의 값을 리턴
- boolean / containsKey(Object key)// 주어진 키가 있으면 true, 없으면 false를 리턴
- boolean / containsValue(Object value)// 주어진 값이 있으면 true, 없으면 false를 리턴
- Set / entrySet()// 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴.
- Object / get(Object key)// 주어진 키에 해당하는 값을 리턴
- boolean / isEmpty()// 컬렉션이 비어 있는지 확인.
- Set / keySet()// 모든 키를 Set 객체에 담아서 리턴
- int / size()// 저장된 Entry 객체의 총 갯수를 리턴
- Collection / values()// 저장된 모든 값을 Collection에 담아서 리턴
- void / clear()// 모든 Map.Entry(키와 값)을 삭제
- Object / remove(Object key)// 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴
*HashMap : 많은 양의 데이터를 검색하는데 뛰어난 성능
- boolean / equals(Object o) // 동일한 Entry 객체인지 비교
- Object / getKey() // Entry 객체의 Key 객체를 반환
- Object / getValue() // Entry 객체의 Value 객체를 반환
- int / hashCode() // Entry 객체의 해시코드를 반환
- Object / setValue(Object value) // Entry 객체의 Value 객체를 인자로 전달한 value 객체로 교체
- 사용법
hashMap.put(key, value); // 묶여서 엔트리 객체로 저장 / 반환값 Set
- key를 통해 value찾기
Set<Map.Entry<String, Integer>> entrySet = hashMap.entrySet(); // iter을 사용하기위해 entrySet 만들기
Iterator<Map.Entry<String, Integer>> iter = entrySet.iterator(); // 만들어진entrySet으로 iter할당
while(iter.hasNext()){
Map.Entry<String, Integer> entry = iter.next(); //이터레이터가 다음걸로 넘어가며 맵 엔트리에 키,값 저장
if(entry.getKey()== key)result = entry.getValue();} // 저장된 엔트리의 key와 찾는 key가 일치하면 값 담아주기
'Study > Java' 카테고리의 다른 글
JSON Object 생성 시 한글 (???) 깨지는 현상 해결 (0) | 2023.03.22 |
---|---|
애너테이션 / 스트림 (0) | 2022.11.15 |
제네릭 / 예외처리 (0) | 2022.11.10 |
다형성 / 추상화 (0) | 2022.11.08 |
상속 / 캡슐화 (0) | 2022.11.07 |