List<E> 컬렉션 변환

gustjtmd·2022년 1월 10일
0

Java

목록 보기
21/40

배열보다는 컬렉션 인스턴스가 좋다.

  • 인스턴스의 저장과 삭제가 편하다.
  • 반복자를 쓸 수 있기 때문이다.

배열처럼 선언과 동시에 초기화 컬렉션 인스턴스를 생성할수 있다.

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<E>는 collection<E>를 상속한다.
        List<String> list = Arrays.asList("Toy", "Box", "Robot", "Box");
        //생성자 public ArrayList(Collection<? extends E> c)를 통한 인스턴스 생성
        list = new ArrayList<>(list);

        //for문 기반의 반복자 획득과 순차적 참조
        for(Iterator<String> itr = list.iterator(); itr.hasNext();)
             System.out.print(itr.next() + '\t');
        System.out.println();

        // "Box"를 삭제하기 위한 반복문
        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);

        // ArrayList<E> 인스턴스의 순환
        for(Iterator<String> itr = list.iterator(); itr.hasNext();)
            System.out.print(itr.next()+'\t');
        System.out.println();

        //ArrayList<E> 인스턴스 기반으로 LinkedList<E> 인스턴스 생성
        list = new LinkedList<>(list);

        //LinkedList<E>의 인스턴스 순환
        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	
profile
반갑습니다

0개의 댓글