배열보다는 컬렉션 인스턴스가 좋다.
인스턴스의 저장과 삭제가 편하다.
반복자를 쓸 수 있기 때문이다.
배열처럼 선언과 동시에 초기화 컬렉션 인스턴스를 생성할수 있다.
List<String> list = Arrays.asList("Toy", "Robot", "Box");
인자로 전달된 인스턴스들을 저장한 컬렉션 인스턴스의 생성 및 반환
이렇게 생성된 인스턴스들은 Immutable(추가 삭제 불가)한 인스턴스이다. 고정임.
추가 삭제가 필요한 경우.
추가 삭제가 필요한 경우 다음 생성자를 기반으로 ArrayList<E> 인스턴스를 생성해야한다
class ArrayList<E>{
public ArrayLise<Collection<? extends E>c{...}
public ArrayList(Collection<E> c)
- Collection<E>를 구현한 컬렉션 인스턴스를 인자로 전달받는다.
- 그리고 E는 인스턴스 생성 과정에서 결정되므로 무엇이든 될 수 있다.
public ArrayList(Collection<? extends E> c)
- 매개변수 c로 전달된 컬렉션 인스턴스에서는 참조만(꺼내기만) 가능하다.
//List<E>는 collection<E>를 상속한다. list는 중복 저장 가능
List<String> list = Arrays.asList("Toy", "Box", "Robot", "Box");
//생성자 public ArrayList(Collection<? extends E> c)를 통한 인스턴스 생성 추가
list = new ArrayList<>(list); //새로 만들었으니 추가 삭제 가능.
예제
List<String> list = Arrays.asList("Toy", "Box", "Robot", "Box");
list = new ArrayList<>(list);
for(Iterator<String> itr = list.iterator(); itr.hasNext();)
System.out.print(itr.next() + '\t');
System.out.println();
for(Iterator<String> itr = list.iterator(); itr.hasNext();){
if(itr.next().equals("Box"))
itr.remove();
}
for(Iterator<String> itr = list.iterator(); itr.hasNext();)
System.out.print(itr.next() + '\t');
System.out.println();
결과 :
Toy Box Robot Box
Toy Robot
대다수 컬렉션 클래스들은 다른 컬렉션 인스턴스를 인자로 전달받는 생성자를 가지고 있어서 다른 컬렉션 인스턴스에 저장된 데이터를 복사해서 새로운 컬렉션 인스턴스를 생성할 수 있다.
public ArrayList(Collection<? extends E> c) ArrayList<E> 생성자중 하나.
public LinkedList(Collection<? extends E> c) LinkedList<E> 생성자중 하나.
public HashSet(Collection<? extends E> c) HashSet<E> 생성자중 하나.
따라서 ArraysList인스턴스를 사용하다가 연결 리스트 자료구조 특성이 필요하면 LinkedList 인스턴스를 생성하면 된다.
예제.
List<String> list = Arrays.asList("Toy", "Box", "Robot", "Box");
list = new ArrayList<>(list);
for(Iterator<String> itr = list.iterator(); itr.hasNext();)
System.out.print(itr.next()+'\t');
System.out.println();
list = new LinkedList<>(list);
for(Iterator<String> itr = list.iterator(); itr.hasNext();)
System.out.print(itr.next()+'\t');
System.out.println();
결과
Toy Box Robot Box
Toy Box Robot Box