Collection<E>
|__ List<E>
|__ ArrayList<E>, LinkedList<E>, …
A. List
A-1. 리스트의 특징
- 값들을 저장하는 순서가 중요 - 인덱스를 가지고 있음
- 값들을 저장할 때마다 인덱스는 자동으로 증가 - 저장 공간이 자동으로 증가
- 리스트 중간에 있는 값을 삭제하면 인덱스가 자동으로 재배열됨.
- 같은 값들을 여러번 저장할 수 있음 - Set<E>과 다른 점
- List<E>에서 E는 리스트가 저장하는 원소(element)의 데이터 타입을 표현한다.
- 🚨🚨🚨 리스트는 클래스 타입의 객체만 저장할 수 있음. 기본타입 데이터는 저장할 수 없습니다! 🚨🚨🚨
A-2. ArrayList<E>의 특징
- 배열을 이용한 리스트
- 데이터를 저장(add), 삭제 속도가 느림
- 데이터 검색 속도 빠름
- 검색 기능
ArrayList<String> languages = new ArrayList<>();
System.out.println(languages); // (1) 출력 : []
System.out.println("size = " + languages.size()); // (2) 출력 : 0
languages.add("호이짜"); // 리스트에 원소 추가
- toString 메서드가 오버라이딩 되어 있음.
- 리스트의 크기 (원소 개수)
- 어떤 요소도 들어가지 않은 배열은 길이가 0
- for 반복문을 사용해서 리스트의 원소들을 모두 출력
- for (int i = 0; i < languages.size(); i++ ) { System.out.println(languages.get(i) + ", "); }
- 향상된 for 구문을 사용한 리스트 원소 출력
- for (String language : languages) { System.out.println(language + ", "); }
- 리스트의 원소 삭제
- languages.remove(0); // 인덱스로 원소 삭제 languages.remove("SQL"); // remove(Object el);
- List를 요소 변경ArrayList의 인덱스와 수정할 데이터를 넘겨주면, 해당하는 인덱스의 값을 수정한다.
- Contact c = new Contact (); contacts.set (index, c);
- List를 ArrayList로 변환하는 과정Arrays.asList() 메서드로 배열을 리스트로 만들 수 있는데, List는 인터페이스이므로 메서드가 구현이 되어 있지 않음. ⇒ 그렇기 때문에 실제 사용하기 위해서는 ArrayList로 데이터 타입을 변경하여야 하고 과정은 위와 같다.
- List<String> list = Arrays.asList("Java", "SQL", "Java", "HTML"); ArrayList<String> alist = new ArrayListM<String>(list);
A-3. LinkedList<E>의 특징
- LinkedList 알고리즘을 이용한 리스트
- 데이터 저장, 삭제 속도가 빠름
- 데이터 검색 속도 느림
- 저장, 삭제 기능 많이 사용 시
B. Set<E> 특징 :
- 중복된 값을 저장하지 않음
- (ex) {1,2,2,3,3,3,} = {1,2,3}
- 저장하는 순서가 중요하지 않음
- 인덱스가 없음 (ex) {1,2} = {2,1}
Set의 반복자
Iterator<Integer> iter = set.iterator();
while (iter.hasNext()) {
int integer = iter.next();
System.out.println(integer);
}
- Set은 인덱스로 객체를 검색해서 가져오는 메서드가 없기 때문에 전체 객체를 대상으로 한 번씩 반복해서 가져오는 반복자를 제공함.
- 반복자는 Iterator 인터페이스를 구현한 객체를 말하고, iterator 메서드를 호출하면 얻을 수 있음. set.iterator()
B-1. HashSet<E>
- Hash 알고리즘 (검색을 빠르게 할 수 있는 알고리즘)을 사용한 자료구조
- equals 메서드를 오버라이딩하여 사용하면
B-2. TreeSet<E>
- Tree 알고리즘 (정렬을 빠르게 할 수 있는 알고리즘)을 사용한 자료구조
- Set<E> get () 메서드를 제공하지 않음
- → for 구문은 사용할 수 없지만, 향상된 for 구문은 사용 가능
- 삭제할 때도 인덱스로 지우는 방법은 없고, remove(Object o) 만 사용 가능
<aside> 💡 List<E>는 remove(int index), remove(Object element) 메서드를 제공
- Set<E>은 remove(Object element) 메서드를 제공 </aside>
-
- 크기 비교가 가능한, 즉 ‘Comparable 인터페이스를 구현’한 클래스들만 TreeSet에 저장될 수 있다.
- Comparable 내 compareTo 메서드를 오버라이딩하여 만들어진 Class들만 저장할 수 있는 것.TreeSet은 정렬 메서드이기 때문에 일반 클래스 (내가 만든)는 저장할 수 없다.
- Date Class가 오버라이딩한 compareTo 메서드
public int compareTo(Date anotherDate) {
long thisTime = getMillisOf(this);
long anotherTime = getMillisOf(anotherDate);
return (thisTime < anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1));
}
C. Map<K, V>
- 키와 값의 쌍으로 구성된 데이터를 저장하는 자료구조
- Key : 중복된 값을 가질 수 없음. 하나의 값을 찾기 위한 인덱스와 비슷한 역할을 함.
- 데이터를 저장, 검색, 수정, 삭제할 때 값을 찾기 위한 용도
- 연속된 값을 가질 필요는 없음
- Value : 중복된 값을 가질 수 있음.
- Map 컬렉션 프레임워크의 공유 메서드
데이터 삭제 | remove(key) | 1. k가 있는 경우, 해당 <K, V>를 삭제, 삭제된 value를 찾아서 리턴 |
- key가 없는 경우 -> 아규먼트로 들어온 default값을 반환 | | 데이터 저장 | put(k, v) | 1) key가 있는 경우, Key -value데이터를 map에 저장
- key가 없는 경우, Key에 매핑되어 있는 값 변경 |
Map의 반복문 사용
Set<Integer> kSet = map.keySet();
for (Integer kInteger : kSet) {
map.get(kInteger);
}
C-1. HashMap<K, V>
- Key를 기준으로 검색을 빠르게 할 수 있는 Map
C-1. TreeMap<K, V>
- Key를 기준으로 정렬을 빠르게 할 수 있는 Map
'programming > Java [notion 정리본 업로드]' 카테고리의 다른 글
입출력 스트림 (0) | 2024.04.15 |
---|---|
JSP/SERVLET 프로젝트 생성 시 Dependencies (0) | 2024.04.13 |
예외처리 (Exception) (0) | 2024.04.13 |
추상클래스와 인터페이스 (0) | 2024.04.13 |
상속 (0) | 2024.04.13 |