List
- 자료가 나열된구조
- Interface이다 상속받은 클래스이 구현을 해놓았다
- 배열도 list (배열과 list의 차이는 공간이 동적이냐 정적이냐 차이다)
대표적 구현 클래스: ArrayList<E>, Vector<E>, LinkedList<E>
메소드설명
| boolean add(E e) | 해당 리스트(list)에 전달된 요소를 추가함. (선택적 기능) |
| void add(int index, E e) | 해당 리스트의 특정 위치에 전달된 요소를 추가함. (선택적 기능) |
| boolean addAll(Collection<? Extends E> c | 매개변수로 입력된 컬렉션 전체를 마지막에 추가/ 넣을값이 없으면 false반환 |
| void clear() | 해당 리스트의 모든 요소를 제거함. (선택적 기능) |
| boolean contains(Object o) | 해당 리스트가 전달된 객체를 포함하고 있는지를 확인함. |
| boolean equals(Object o) | 해당 리스트와 전달된 객체가 같은지를 확인함. |
| E get(int index) | 해당 리스트의 특정 위치에 존재하는 요소를 반환함. |
| boolean isEmpty() | 해당 리스트가 비어있는지를 확인함. |
| boolean remove(Object o) | 해당 리스트에서 전달된 객체를 제거함/ 삭제할값이없으면 false 반환 |
| boolean remove(int index) | 해당 리스트의 특정 위치에 존재하는 요소를 제거함. (선택적 기능) |
| E set(int index, E e) | 해당 리스트의 특정 위치에 존재하는 요소를 전달받은 객체로 대체함. (선택적 기능) |
| int size() | 해당 리스트의 요소의 총 개수를 반환함. |
| Object[] toArray() | 해당 리스트의 모든 요소를 Object 타입의 배열로 반환함. (배열크기 자동변환 크기만큼) |
ArrayList<E> vs Vector<E>
-위둘은 기능적으로는 동일한 기능을 수행한다
-Vector은 멀티쓰레드 환경에서도 사용할 수 있도록 만든것이다.(동기화가능)
-ArrayList는 원래 동기화가 안되지만 collection class를 통해서 동기화기능을 사용할 수 있다.
ArrayList<E> vs LinkedList<E>
-삽입삭제가 빠른건 LinkedList ( Why? : LinkedList는 각 원소 앞뒤 객체 정보만 수정하면 되기 때문)
-검색이 빠른건 ArrayList ( Why? : ArrayList는 인덱스 번호를 갖고 있어서 특정 인덱스 위치의 데이터를 빠르게 찾을 수 있음)
Set<E>
-집합의특징 가짐(동일한 Data를 허용하지 않는다.)
-Interface이다 상속받을 클래스가 구현해놓음
-주머니에서 안보고 막 사탕 뽑는거임(그니깐 순서가 항상 다름)
-Set은 값을 넣을때마다 중복확인을 하지만 정렬은 보장하지않는다. 중복검사 때문에 List<E>보다 느리다.
대표적 클래스: HashSet<E>, LinkedHashSet<E>, TreeSet<E>
주요 메소드
| boolean add(E element) | 매개변수로 입력된 원소를 리스트에 추가 // 중복된값이 있으면False 반환 |
| boolean addAll(Collection<? Extends E> c) | 매개변수로 입력된 컬렉션 전체를 추가 |
| boolean remove(Object o) | 원소중 매개변수 입력과 동일한 개체 삭제 |
| void clear() | 전체 원소 삭제 |
| boolean isEmpty() | Set<E> 객체가 비어 있는지 여부를 리턴 |
| boolean contains(Object o) | 매개변수로 입력된 원소가 있는지 여부를 리턴 |
| int size() | 리스트 객체 내에 포함된 원소의 개수 |
| Iterator<E> iterator() | Set<E> 객체 내의 데이터를 연속해 꺼내는 Iterator객체 리턴 |
| Object[] toArray() | 리스트를 Object 배열로 변환 |
| T[] toArray(T[] t) | 입력매개변수로 전달한 타입의 배열로 변환 |
HashSet<E>
-주요 메소드
boolean hasNext() : 다음으로 가르킬 원소의 존재여부를 boolean으로 리턴 (false 리턴할시 마지막 데이터까지 읽은것임)
E next(): 다음 원소 위치로 가서 읽은 값을 리턴
-Iterator<E> 객체가 생성되면 객체가 가르키고 있는 위츠는 첫 원소 위치가 아닌 첫 원소 바로 이전의 위치값이다.
즉, Iterator.next()를 하면 첫번째 원소값을 읽을 수 있게됨.
-중복 확인 매커니즘: if A a1=new A(3) 과 A a2=new A(3)이라는 값이있다고 가정.. 과연 HashSet 입장에서는 같은거라고 인식할까? 생성자에 동일한 값을 넘겨 객체를 생성했으므로 두 객체는 완벽히 똑같이 생겼지만 답은 아니요이다.
마땅한 오버라이딩을 하지않았다면 아래있는 형태 일것이다.
public boolean equals(Object obj) {
return (this == obj);
}
참조자료형의 등가연산은 위치값을 비교한다. 고로 a1와 a2의 위치는 엄연히 다름으로 false가 반환되어 같지 않다고 판단될것이다. 그러면 String의 경우는 어떠할까? String 은 오버라이딩이 아래코드 처럼 되어있다.
//equals 오버라이딩
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (!COMPACT_STRINGS || this.coder == aString.coder) {
return StringLatin1.equals(value, aString.value);
}
}
return false;
}
// 해쉬코드 오버라이딩
public int hashCode() {
// The hash or hashIsZero fields are subject to a benign data race,
// making it crucial to ensure that any observable result of the
// calculation in this method stays correct under any possible read of
// these fields. Necessary restrictions to allow this to be correct
// without explicit memory fences or similar concurrency primitives is
// that we can ever only write to one of these two fields for a given
// String instance, and that the computation is idempotent and derived
// from immutable state
int h = hash;
if (h == 0 && !hashIsZero) {
h = isLatin1() ? StringLatin1.hashCode(value)
: StringUTF16.hashCode(value);
if (h == 0) {
hashIsZero = true;
} else {
hash = h;
}
}
return h;
}
위 오버라이딩을 통해서 HashSet에서 같은 String값을 비교할경우 true가 반환되어 중복을 확인한다.
LinkedHashSet<E>
-HashSet과 다르게 입력된 순서를 기억하고 있다( 출력순서가 입력순서와 같다) means that its not randomly pick up
But List<E> 처럼 중간에 데이터를 추가 or 특정순서에 저장된 값을 가져오는것은 불가능하다.
- 위 특징빼고는 HashSet과 유사하다.
TreeSet<E>
-데이터 입력 순서와 상관없이 크기순으로 출력( 즉 두 객체의 크기 비교함)
-정렬과 검색 기능 가능 (NavigableSet<E>와 SortedSet<E>를 부모 인터페이스로 두고 있기 때문)
-위 특징때문에 객체 타입을선언할때 반드시 TreeSet<E>로 객체 타입을 선언해야 정렬검색기능을 사용 할 수 있다.
-자동으로 오름차순으로 데이터를 정렬해 저장
주요 메소드
| E first() | Set 원소 중 가장 작은 원소값 리턴 |
| E last() | Set 원소 중 가장 큰 원소값 리턴 |
| E lower(E element) | 매개변수로 입력된 원소보다 작은, 가장 큰수 (ex lower(3)//2 |
| E higher(E element) | 매개변수로 입력된 원소보다 큰, 가장 작은 수(ex higer(3)//4 |
| E floor(E element) | 매개변수로 입력된 원소보다 같거나 작은 가장 큰 수 |
| E ceiling(E element) | 매개변수로 입력된 원소보다 같거나 큰 가장 작은 수 |
| E pollFirst() | Set 원소들 중 가장 작은 원소값을 꺼내 리턴 |
| E pollLast() | Set 원소들 중 가장 큰 원소값을 꺼내 리턴 |
| SortedSet<E> headSet(E toElement) | toElement 미만인 모든 원소로 구성된 Set을 리턴 (toElement 미포함) |
| NavigableSet<E> headSet(E toElement,boolean inclusive) | toElement 미만/이하인모든 원소로 구성된 Set을 리턴 (inclusive=true면 toElement포함 false면 미포함) |
| SortedSet<E> tailSet(E fromElement) | toElement 이상인 모든 원소로 구성된 Set을 리턴 (fromElement 미포함) |
| NavigableSet<E> tailSet(E fromElement,boolean inclusive) | toElement 초과/이상인모든 원소로 구성된 Set을 리턴 (inclusive=true면 fromElement포함 false면 미포함) |
| SortedSet<E> subSet(E fromElement,E toElement) | fromElement 이상 toElement미만인 원소들로 이뤄진 Set을 리턴(fromElement 포함,toElement 미포함) |
| NavigableSet<E> subSet (E fromElement, boolean frominclusive, E toElement, boolean toinclusive) |
fromElement 초과/이상 toElement 미만/이하인 원소들로 이뤄진 Set을 리턴(fromclusive=true/false면 fromElement 포함/미포함, toclusive=true/false면 toElement 포함/미포함) |
| NavigableSet<E> descendingSet() | 현재 정렬 기준을 반대로 변환(오름-> 내림 or 내림->오름) |
-데이터 크기 비교: Integer일시 숫자 크기순으로 저장 String일시 사전 순서로 저장
Map<K,V>
-Key값은 중복허용하지않는다
-Value는 중복허용을 한다.
-구현 클래스로는 HashMap<K,V> , LinkedHashMap<K,V> , Hashtable<K,V> , TreeMap<K,V> 가 있다.
주요메소드
| V put(K key,V value) | 입력매개변수의 (key,value)를 Map객체에 추가 |
| void putAll(Map<? extends K, ? extends V> m) | 입력매개변수의 map객체를 통째로 추가 |
| V replace(K key,V value) | Key에 해당하는 값을 Value값으로 변경(old값 리턴) 해당키없으면 null 리턴 |
| boolean replace(K key, V oldValue, V newValue) | (key,oldValue)의 쌍을 갖는 엔트리에서 oldValue를 newValue로 변경(단, 해당엔트리가 없으면 false를 리턴) |
| V get(Object key) | 매개 변수의 Key값에 해당하는 Value를 리턴 |
| boolean containsKey(Object key) | 매개변수의 Key값이 포함돼 있는지 여부(잇으면 true 반환) |
| containsValue(Object value) | 매개변수의 Value값이 포함돼 있는지 여부 |
| Set<K> keySet() | map 데이터들 중 key들만 뽑아 Set 객체로 리턴 |
| Set<Entry<K,V>> entrySet() | Map의 각 엔트리들을 Set객체로 담아 리턴 |
| int size() | Map에 포함된 엔트리의 개수 |
| Collection<V> values | 저장된 모든값을 Collection에 담아서 리턴 |
| V remove(Object key) | 입력매개변수의 Key를 갖는 엔트리 삭제(단 ,해당Key가 없으면 아무런 동작을 하지 않음) |
| boolean remove(Object key, Object Value) | 입력매개변수의 (key,value)를 갖는 엔트리 삭제( 단, 해당 엔트리가 없으면 아무런 동작을 하지 않음) |
| void clear() | Map 객체 내의 모든 데이터 삭제 |
HashMap<K,V> 의 중복 메커니즘은 HashSet<E> 중복매커니즘 과정의 내용과 동일하다, 다만 Key에만 적용한것이다
map.put(new Student(1,"홍길동"),95);
map.put(new Student(1,"홍길동"),95);
위코드를 보면 중복된것으로 인정되서
map.size를 구하면 1인 나온다
-이것이 자바다 745쪽 참고
Hashtable<K,V>
-HashMap<K,V>와 다른점은 멀티 쓰레드에도 안전하다 차이이다.(동기화가 가능하다는말이다)-thread safe
LinkedHashMap<K,V>
-HashSet<E>와 LinkedHashSet<E> 관계의 동일개념을 가지고있다. 누구와? HashMap과 LinkedHashMap과
-LinkedHashSet<E> 처럼 입력된 순서를 기억하고 있음
Treemap<K,V>
-Map<K,V>의 기본 기능 + 정렬 및 검색 기능 추가
-Data를 Key값의 크기 순으로 저장
- TreeSet<E>의 메소드와 매우 비슷 차이점은 Data가 (Key, Value)쌍의 엔트리 형태로 저장되기 떄문에 key와 엔트리에 데이터를 검색하거나 추출하는 메소드가 포함된다는 점이다.
-주요 메소드
| Map.Entry<K, V> ceilingEntry(K key) | 해당 맵에서 전달된 키와 같거나, 전달된 키보다 큰 키 중에서 가장 작은 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
| K ceilingKey(K key) | 해당 맵에서 전달된 키와 같거나, 전달된 키보다 큰 키 중에서 가장 작은 키를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
| void clear() | 해당 맵(map)의 모든 매핑(mapping)을 제거함. |
| boolean containsKey(Object key) | 해당 맵이 전달된 키를 포함하고 있는지를 확인함. |
| boolean containsValue(Object value) | 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지를 확인함. |
| NavigableMap<K, V> descendingMap() | 해당 맵에 포함된 모든 매핑을 역순으로 반환함. |
| Set<Map.Entry<K, V>> entrySet() | 해당 맵에 포함된 모든 매핑을 Set 객체로 반환함. |
| Map.Entry<K, V> firstEntry() | 해당 맵에서 현재 가장 작은(첫 번째) 키와 그에 대응하는 값의 엔트리를 반환함. |
| K firstKey() | 해당 맵에서 현재 가장 작은(첫 번째) 키를 반환함. |
| Map.Entry<K, V> floorEntry(K key) | 해당 맵에서 전달된 키와 같거나, 전달된 키보다 작은 키 중에서 가장 큰 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
| K floorKey(K key) | 해당 맵에서 전달된 키와 같거나, 전달된 키보다 작은 키 중에서 가장 큰 키를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
| V get(Object key) | 해당 맵에서 전달된 키에 대응하는 값을 반환함. 만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함. |
| SortedMap<K, V> headMap(K toKey) | 해당 맵에서 전달된 키보다 작은 키로 구성된 부분만을 반환함. |
| Map.Entry<K, V> higherEntry(K key) | 해당 맵에서 전달된 키보다 작은 키 중에서 가장 큰 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
| K higherKey(K key) | 해당 맵에서 전달된 키보다 작은 키 중에서 가장 큰 키를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
| Set<K> keySet() | 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함. |
| Map.Entry<K, V> lastEntry() | 해당 맵에서 현재 가장 큰(마지막) 키와 그에 대응하는 값의 엔트리를 반환함. |
| K lastKey() | 해당 맵에서 현재 가장 큰(마지막) 키를 반환함. |
| Map.Entry<K, V> lowerEntry(K key) | 해당 맵에서 전달된 키보다 큰 키 중에서 가장 작은 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
| K lowerKey(K key) | 해당 맵에서 전달된 키보다 큰 키 중에서 가장 작은 키를 반환함. 만약 해당하는 키가 없으면 null을 반환함. |
| Map.Entry<K, V> pollFirstEntry() | 해당 맵에서 현재 가장 작은(첫 번째) 키와 그에 대응하는 값의 엔트리를 반환하고, 해당 엔트리를 맵에서 제거함. |
| Map.Entry<K, V> pollLastEntry() | 해당 맵에서 현재 가장 큰(마지막) 키와 그에 대응하는 값의 엔트리를 반환하고, 해당 엔트리를 맵에서 제거함. |
| V put(K key, V value) | 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함. |
| V remove(Object key) | 해당 맵에서 전달된 키에 대응하는 매핑을 제거함. |
| boolean remove(K key, V value) | 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함. |
| V replace(K key, V value) | 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함. |
| boolean replace(K key, V oldValue, V newValue) | 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함. |
| int size() | 해당 맵의 매핑의 총 개수를 반환함. |
| SortedMap<K, V> subMap(K fromKey, K toKey) | 해당 맵에서 fromKey부터 toKey까지로 구성된 부분만을 반환함. 이때 fromKey는 포함되나, toKey는 포함되지 않음. |
| SortedMap<K, V> tailMap(K fromKey) | 해당 맵에서 fromKey와 같거나, fromKey보다 큰 키로 구성된 부분만을 반환함. |
'몰입형학습' 카테고리의 다른 글
| GET 방식과 Post 방식 (0) | 2022.09.04 |
|---|---|
| OSI 계층 모델 7계층 ~ (0) | 2022.09.04 |
| [Java] 모듈화( method and function) and Class and this의 이해 (0) | 2022.06.27 |
| [JAVA] 배열정리+ String 객체이해 (0) | 2022.06.23 |
| 진법변환 (0) | 2022.06.23 |
댓글