: 몇 가지 인터페이스를 통해 다양한 컬렉션 클래스를 이용할 수 있도록 설계 되어있다.
객체 추가 메소드
- boolean add(E element)
: 주어진 element를 뒤에 추가
- void add(int index, E element)
: 인덱스에 element를 추가
- set(int index, E element)
: 인덱스의 객체를 element로 변경
객체 검색 메소드
- boolean contains(Object o)
: 객체가 저장되어 있는지 여부
- E get(int index)
: 인덱스에 지정된 객체를 리턴
- isEmpty()
: 컬렉션이 비었는지 조사
- int size()
: 저장되어 있는 전체 객체 수를 리턴
객체 삭제 메소드
- void clear()
: 저장된 모든 객체 삭제
- E remove(int index)
: 인덱스에 저장된 객체 삭제
- boolean remove(Object o)
: 주어진 객체를 삭제
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class LinkedListExample01 {
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
List<String> list2 = new LinkedList<String>();
long startTime;
long endTime;
startTime = System.nanoTime();
for (int i = 0; i < 10000; i++) {
list1.add(0, String.valueOf(i));
}
endTime = System.nanoTime();
System.out.printf("%-17s %8d ns \n", "ArrayList 걸린 시간 : ", (endTime - startTime));
startTime = System.nanoTime();
for (int i = 0; i < 10000; i++) {
list2.add(0, String.valueOf(i));
}
endTime = System.nanoTime();
System.out.printf("%-17s %8d ns \n", "LinkedList 걸린 시간 : ", (endTime - startTime));
}
}
콘솔
ArrayList 걸린 시간 : 7407700 ns
LinkedList 걸린 시간 : 3148300 ns
ArrayList의 작업 시간이 더 오래 걸리는 것을 확인할 수 있다.
Set 컬렉션은 수학에서의 집합을 떠올리면 이해가 쉽다
집합과 Set컬렉션의 공통점은
같은 원소를 가질 수 없고 순서 상관이 없다는 점이 있다.
- boolean add(E element)
: 주어진 객체를 성공적으로 저장하면 true를 리턴하고 중복 객체면 false 리턴한다.- boolean contains(Object o)
: 객체가 있는지 여부- isEmpty()
: 비었는지 조사- Iterator<E> iterator()
: 저장된 객체를 한 번씩 가져오는 반복자 리턴- int size()
: 저장된 전체 객체 수 리턴- void clear()
: 모든 객체 삭제- boolean remove(Object o)
: 주어진 객체를 삭제.순서가 없기 때문에 인덱스도 존재할 수 없다.
대신 객체를 한 개씩 반복해서 가져오는 방법이 있다.
for each 문이나 Iterator를 사용하는 것이다.
- hasNext()
: 가져올 객체가 있으면 true 없으면 false를 리턴한다.- next()
: 컬렉션에서 하나의 객체를 가져온다- remove()
: next()로 가져온 객체를 Set 컬렉션에서 제거한다.import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class IteratorExample01 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("가");
set.add("나");
set.add("다");
set.add("라");
set.add("마");
set.add("바");
set.add("사");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String str = iterator.next();
System.out.println(str);
if (str.equals("라")) {
iterator.remove();
System.out.println(str + " 삭제");
}
}
System.out.println("------");
for (String s : set) {
System.out.println(s);
}
}
}
콘솔
가
다
바
나
마
라
라 삭제
사
------
가
다
바
나
마
사
순서는 보장되지 않기 때문에 랜덤이지만 "라"는 삭제 되었다.
HashSet은 hashcode() 메소드의 리턴값이 같고, equals() 메소드가 true이면
동일하다고 판단하여 중복 저장하지 않는다.
그러므로 같은 문자열을 갖는 String 객체는 중복 저장되지 않는다.