- Vector은 Deprecated, ArrayList랑 LinkedList 만 알면 된다.
)
(+) 다형성 : 조상타입의 참조변수로 자식을 다룰 수 있는 것
List<컬렉션> listName = new ArrayList();
저장 순서 유지, 중복 허용
remove 주의
list1.remove(1) // 인덱스가 1인 객체를 삭제
list1.remove(new Integer(1)); //1을 삭제
배열의 장점
- 구조가 간단, 읽는데 걸리는 시간 short
연속적인 성격
배열의 단점
- 크기 변경 불가능, 변경해야 하면 새 배열 생성 후 데이터 복사해야해
(크기 변경 피하기 위해 충분히 큰 배열 생성 시 메모리 낭비)
비 순차적 데이터 추가, 삭제에 투머치 타임
BUT 접근성이 나쁘다, 불연속적 배열처럼 한번에 이동 불가능, 한번에 갈 수 없음
=> 이를 보완해서 나온 것이 더블리 링크드 리스트
1) 순차적 데이터 추가, 삭제 => ArrayList 빠름
2) 비순차적 데이터 추가, 삭제 => LinekdList가 빠름
3) 접근 시간 - ArrayList 빠름
4) 변경은 Linkedlist가 빠름
Iterator
, ListIteratorIterator iter = 컬렉션.iterator()
을 통해 iterator 구현한 객체 얻어서 사용해야 함
- Comparable : 기본 정렬 기준
- Comparator : 기본 정렬 기준 외에 다른 기준으로 정렬하고자 할 때 사용
public interface Comaprable{
int compareTo(Object o)
}
public interface Comparator{
int compare(Object o1, Object o2); // o1, o2 두개를 비교
boolean equals(Object obj); // equals 오버라이딩 해라
}
static void sort(Object[ ] a)
// 객체 배열에 저장된 a가 구현한 Comparable(정렬기준)에 의한 정렬
static void sort(Object[ ] a, Comparator c) // c 가 정렬 기준을 주는 것
// 지정한 Comparator에 의한 정렬
Arrays.sort(배열)
=> 이유는 int가 상속받고 있는 Number그 자체에서 Comparable을 상속받고 CompareTo를 오버라이딩 할 때 오름차순으로 정렬되게 정의해놔서이기 때문
(+)
compareTo의 정렬 기준
compareTo의 리턴 결과가 양수
-> compareTo 메서드를 부르는 객체가 더 크고, 파라미터로 들어온 o 객체가 더 작다고 판별된다.
-> 주체객체와 대상객체가 교체하여 정렬된다.compareTo의 리턴 결과가 0
-> 두 객체의 값이 동일하다고 판별된다.
-> 정렬을 유지한다.compareTo의 리턴 결과가 음수
-> compareTo 메서드를 부르는 객체가 더 작고, 파라미터로 들어온 o 객체가 더 크다고 판별된다.
-> 정렬을 유지한다.
(출처: https://yuja-kong.tistory.com/entry/Java-객체-정렬-Comparable-Comparator)
Arrays.sort(배열, 정렬기준(Comparator구현체))
=> 반면 아래 애는 Comparator을 구현한 새로운 정렬기준 넣어줬는데, 이 구현체에서는 비교를 내림차순으로 하게 해놔서 내림차순으로 정렬이 되게 함
setA.retainAll(setB)
setA.removeAll(setB)
setA.addAll(setB)