개발자 끄적끄적

컬렉션(Collection) - (2) 본문

JAVA

컬렉션(Collection) - (2)

햏치 2023. 3. 4. 18:48

<컬렉션>
- 자바에서 사용하는 자료 구조의 한 방법으로 배열의 단점을 보안하고
  검색이나 정렬 등의 편의 기능들이 추가


<종류>
- List
- Set
- Map
- Properties




[주요 기능 비교 - CRUD] 

<List - Interface(객체 생성 불가)>
C(Create) : add
R(Read) : get(i)
U(Update) : set
D(Delete) : remove
기타 :
- 순서 있다(첨자)
- 중복 가능
- 배열구조와 유사



<Set - Interface(객체 생성 불가)>
C(Create) : add
R(Read) : Iterator
U(Update) : remove->add
D(Delete) : remove
기타 :
- 순서 없다
- 중복 불가능




<Map - Interface(객체 생성 불가)>
C(Create) : put(a, v) 
R(Read) : get, keySet, Values
U(Update) : put(a, v)
D(Delete) : remove
기타 :
- Key : 중복 불가능(UK)
- Value : 중복 가능





<List>
- 순서를 유지하고 자료의 중복 저장이 가능하다
- 배열과 가장 유사한 구조이다
- 주요 클래스(List 인터페이스의 메소드) : ArrayList, Vector, LinkedList



[메서드]
- add(E) : 요소를 추가
- set(Index, E) : Index위치의 값을 E로 수정
- get(Index) : Index위치의 값을 가져온다
- remove(Index)
  remove(E) : Index의 위치나 E의 값을 제거
- boolean contains(E) : E의 요소가 있는지 판별
- boolean containsAll(List) : List요소의 부분 집합인가를 체크
- List<E>retainAll(List<E>) : 두 List의 교집합을 구한다
*<E>
- E라는 타입 파라미터는 List 인터페이스가 제네릭 타입이기 때문


*List<String> data = new ArrayList<String>(); 선언하는 이유
- List이 인터페이스이기 때문이다
- 인터페이스는 선언이 가능하며 객체 생성은 불가능하다
- 자식인 ArrayList, Vector등을 객체로 생성한다
- ArrayList, Vector는 본인의 메소드 외에 부모인 List의 메소드를 강제 상속받는다

 

 

<Set>
- 중복저장되지 않고 순서를 유지하지 않는다
- 주요 클래스(Set 인터페이스의 메소드) : HashSet, Hashtable

[주요 메서드]
add(E) : E를 추가한다
*boolean add(E) : 주어진 객체를 저장 후 성공적이면 true, 중복 객체면 false 리턴

remove(index) - X(순서가 없기 때문에 index값이 존재하지 않는다)
remove(E) : E를 제거
*boolean remove(Object o) : 주어진 객체를 삭제

interator() : 값을 나열형으로 가져온다
*Iterator<E> : 저장된 객체를 한번씩 가져오는 반복자를 리턴

boolean contains(E) : E의 값이 있는지 판별

*IsEmpty() : 컬렉션이 비어있는지 조사
*int Size() : 저장되어 있는 전체 객체 수를 리턴
*void clear() : 저장된 모든 객체를 삭제

 

 

<Map>
- Key, Values가 한 쌍으로 저장된다
- Key는 중복되지 않고 저장 순서가 유지되지 않는다
- 동일한 Key값으로 값을 저장하면 기존값이 수정된다
- Map, Entry를 사용하여 키와 값을 한쌍으로 처리할 수 있다
- Value는 중복저장된다
- 주요 메서드(Map 인터페이스의 메소드) : HashMap, TreeMap, SortMap

[주요 메서드]
put(K, V) : K, V를 한 쌍으로 저장한다
get(K) : 키 값이 K인 값을 가져온다
remove(K) : 키 값이 K인 값을 제거한다
*boolean containsKey(Object Key) : 주어진 키가 있는 지 확인
*boolean ContainsValue(Object value) :  주어진 값이 있는 지 확인
*Set<Map.Entry<K, V>>entrySet() : 모든 Map.Entry객체를 Set에 담아 리턴
*Set<K>keyset() : 모든 키를 Set객체에 담아 리턴
*V get(Object key) : 주어진 키에 잇는 값을 리턴
*boolean isEmpty() : 컬렉션이 비어있는지 조사
*int Size() : 저장되어 있는 전체 객체의 수를 리턴
*Collection<V>values() : 저장된 모든 값을 Collection에 담아서 리턴
*void clear() : 저장된 모든 Map.Entry를 삭제
*V remove(Object Key) : 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴

*key값은 null이 한 개만 존재해야한다
*HashTable은 key, value에 null 값이 들어갈 수 없다

*Map<String, String> map = new HashMap<String, String>();이 선언 가능 이유
- Map이 인터페이스이기 때문
- 인터페이스는 선언만 가능하며 객체 생성이 불가능
  때문에, 자식인 HashMap으로 객체를 생성한다
- HashMap은 본인의 메소드 외 부모인 Map의 메소드를 강제 상속받는다
  따라서, HashMap<String, Object> map2 = new HashMap<>();도 가능

[HashMap의 특징]
- key와 value를 하나의 쌍으로 묶어서 저장하는 컬렉션 인터페이스
- key는 중복X | value는 중복O
- 동일한 key에 새로운 value를 삽입하면 기존 value는 제거되고 새로운 value 갱신





<HashMap이란?>
- Map 인터페이스에 속해 있는 컬렉션
- Map 인터페이스의 기본 기능들을 전부 구현 가능
- 데이터들은 모두 (키, 값)의 1:1 구조로 되어있는 Entry로 구현
- key값은 중복X | value값은 중복O(null도 가능)





<HashMap 선언>
- HashMap은 Key, Value 2개의 값을 가지고 있으므로 타입을 선언하려면
  두 개의 타입을 선언해야 한다
HashMap<타입, 타입>변수명 = new HashMap<타입, 타입>();

'JAVA' 카테고리의 다른 글

Properties, Thread - (1)  (0) 2023.03.04
컬렉션(Collection) - (1)  (0) 2023.03.04
String Tokenizer, Math, Format 클래스, 중첩 클래스  (0) 2023.03.04