JAVA

컬렉션 프레임워크 -1 List, ArrayList, LinkedList

다오__ 2023. 6. 11. 19:48

컬렉션 프레임워크는 컬렉션, 다수의 데이터를 다루는데 필요한 다양한 클래스들을 제공한다.

또한 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어있기 때문에 사용법을 익히기에도 편리하고 재사용성이 높은 코드를 작성할 수 있다는 장점이 있다.

 

 

Collection인터페이스의 메서드

 

 

 

List : 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.

예) 대기자 명단

구현클래스로는 ArrayList, LinkedList, Stack, Vector 등이 있다.

 

 

  이때 ArrayList와 Vector 클래스는 거의 동일하지만,  

  ArrayList는 Thread safe하지 않고, Vector는 Thread safe하다. 

  (Thread safe하지 않다는 것은 객체에 여러 명이 달려들어 값을 변경하려고 하면 문제가 발생할 수 있다는 것)

 

ArrayList

  • ArrayList는 컬렉션 프레임워크에서 가장많이 사용되는 컬렉션 클래스이다.
  • 데이터의 저장순서가 유지
  • 중복을 허용
  • ArrayList는 기존의 Vector를 개선한 것으로 기능적인 측면에서 동일

 

ArrayList의 추가와 삭제

ArrayList 배열에 객체를 순차적으로 저장할 때와 객체를 마지막에 저장된 것부터 삭제하면 데이터를 옮기지 않아도 되기 때문에 작업시간이 짧지만,

배열의 중간에 위치한 객체를 추가하거나 삭제하는 경우 다른 데이터의 위치를 이동시켜 줘야 하기 때문에 다루는 데이터의 개수가 많을 수록 작업시간이 오래 걸린다는 것이다.

 

 

LinkedList

  • 불연속적으로 존재하는 데이터를 서로 연결한 형태
  • 요소(node)들은 다음 요소에 대한 참조와 데이터로 구성되어있음

 

LinkedList 추가와 삭제

삭제하고자 하는 노드의 이전노드가 삭제하고자 하는 노드의 다음 노드를 참조하도록 변경하기만 하면 된다. 하나의 참조만 변경하면 되므로 처리속도가 매우 빠르다.

 

새로운 데이터를 추가할때는 새로운 노드를 생성한 추가하고자 하는 위치의 이전 노드의 참조를 새로운 노트에 대한 참조로 변경해주고 새로운 노드는 다음 노드를 참조하도록 변경하기만 하면 되므로 처리속도가 매우 빠르다.

 

ArrayList LinkedList 비교

요소들이 연속적으로 메모리상에 존재하는 ArrayList 경우, 간단한 계산만으로 노드의 주소를 얻어 저장된 데이터를 곧바로 읽어올 있어 빠르지만,

 

 LinkedList 불연속적으로 위치한 노드들이 서로 연결된 것이다. 처음부터 n번째 데이터까지 차례대로 따라가야만 원하는 값을 얻을 있다.

 

그래서 저장 해야하는 데이터가 많아질 수록 데이터를 읽어오는 시간, 접근시간이 길어진다는 단점이 있다.

 

 

 

Set : 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.

예) 양의 저웃집합, 소수의 집합

구현클래스로는 HashSet, TreeSet 등이 있다.

 

Map : 키와 값의 쌍으로 이루어진 데이터의 집합이다. 순서는 유지되지 않으며 키는 중복을 허용하지 않고 값은 중복을 허용한다. 예)우편번호, 지역번호(전화번호)

구현클래스로는 HashMap, TreeMap, Hashtable, Properties등이 있다.

 

 

 

 

실제 개발 시 다루고자 하는 컬렉션의 특징을 파악하고 어떤 인터페이스를 구현한 컬렉션 클래스를 사용해야하는지 결정해야 한다.

 

 

 

 

 

참조 :  https://www.crocus.co.kr/1553