CODEDRAGON ㆍDevelopment/Algorithm, DataStructure
LinkedList<E>에서 컬렉션 클래스를 HashSet<E>로 변경
IteratorEx01.java에서 LinkedList<E>를 HashSet<E>변경시 반복자를 사용하기 때문에
컬렉션 선언만 바뀌고 나머지 부분은 모두 동일하게 사용할 수 있습니다.
LinkedList<String> list = new LinkedList<String>(); list.add("First"); list.add("Second"); list.add("Third"); list.add("Fourth"); list.add("Fifth"); |
현재 LinkedList<E> |
HashSet<String> set = new HashSet<String>(); set.add("First"); set.add("Second"); set.add("Third"); set.add("Fourth"); set.add("Fifth"); |
LinkedList<E>에서 컬렉션 클래스를 HashSet<E>로 변경 |
ArrayList에 저장된 요소 출력하기
ArrayList대신 List인터페이스를 구현한 다른 컬렉션 클래스에 대해서도 동일한 코드를 사용할 수 있습니다.
첫줄의 ArrayList() 생성자 대인 List인터페이스를 구현한 다른 컬렉션 클래스의 객체를 생성하도록 변경하면 나머지 부분은 모두 동일하게 사용할 수 있습니다.
Iterator를 이용해서 컬렉션의 요소를 읽어오는 방법은 표준화되어 있기 때문에 아래와 같이 코드의 재사용성을 높일 수 있습니다.
// 다른 컬렉션으로 변경할 때는 new ArrayList()부분만 변경하면 됩니다. List list = new ArrayList();
Iterator iterator = list.iterator();
while(iterator.hasNext()){ System.out.println(iterator.next()); } |
List에 없고 ArrayList에만 있는 메소드를 사용하는 것이 아니라면 List타입의 참조변수를 생성하도록 선언하는 것이 좋습니다.
성능상의 이유이거나 테스트할 목적으로 List인터페이스를 구현한 다른 클래스로 바꿔야 한다면(LinkedList로 바꿔야 한다면) 선언문 하나만 변경하면 나머지 부분은 모두 동일하게 변경없이 사용할 수 있습니다.
List list = new LinkedList(); |
즉, 참조변수의 타입이 List이므로 List에 정의되지 않은 메소드는 사용하지 않을 것이기 때문입니다.
ArrayList list = new LinkedList(); |
만약 참조변수의 타입을 ArrayList로 한 경우 참조변수 선언 이후의 코드를 검토하여 List에 정의되지 않은 메소드를 호출했는지 확인해야 합니다.
'Development > Algorithm, DataStructure' 카테고리의 다른 글
Douglas-Peucker 알고리즘 (DP Algorithm) (0) | 2019.11.20 |
---|---|
큐(Queue), Queue 활용 사례 (0) | 2019.10.16 |
자료 형태에 따른 자료 구조 분류 (0) | 2019.06.22 |
Collections (0) | 2019.06.10 |
ArrayList & Vector 사용시 고려사항 (0) | 2019.06.04 |