[Java] Collection( List, Set, Map )이란?

2023. 4. 21. 07:49프로그래밍/Java

자바에서 자료구조를 배우다보면 필연적으로 접하게되는 개념이 바로 자료구조와 알고리즘이다. 처음에 이 단어를 들었을 떄는 '알고리즘은 많이 들어봐서 알겠는데 자료구조는 뭐지?'라는 추상적인 개념만이 머리속에 존재하고 있었다. 그러나 우리는 배움에 있어서 시각적인 요소를 활용했을 때 훨씬 효율적으로 받아들일 수 있고 나 역시 그랬다. 특히 자료구조를 단순히 프로그래밍과 글로서만 접하게 되면 이해하기 굉장히 난해할 수 있기 때문에 이렇게 시각자료와 덧붙여 정리하게 됐다.

 

1. Colletion이란?

 

2. List 컬렉션

 

3. Set 컬렉션

 

4. Map 컬렉션

 

 

 

1.  Collection이란?



 

 

 

컬렉션 프레임워크는 인터페이스로 하위 4개의 인터페이스를 두고 있다. 각각 많이 들어봤던 List, Map, Set, Queue이다.
이중 Queue 인터페이스를 제외한 3개의 인터페이스에 대해 좀 더 자세히 설명해보겠다.

 

 

2  LIst 컬렉션이란?


-List 컬렉션


  List 역시 인터페이스로 우리가 자주 사용하던 List 관련 클래스들이 이 List컬렉션에 포함돼있다.
  ArrayList, LinkedList, Vector, Stack이 있다
  List만의 공통적인 특징들과 각각의 클래스들의 개별적인 특징도 존재한다
  우선 List는 선형구조 자료형으로서 순서가 있다. 즉 인덱스번호가 있다는 것인데 ArrayList와 Vector는 일반적으로 우리가 알고 있는
  배열을 이용해 크기가 가변적인 리스트를 만들어준다. 따라서 인덱스가 있기때문에 값의 조회 및 수정에는 빠를 수 있지만 삭제 및 추가에    는 배열의 생성 및 삭제가 반복되기 떄문에 비효율적이다.

 

  - ArrayList는 쉽게 생각하면 Array(배열)와 LinkedList를 합친것이라 생각하면 된다.
  Linked List처럼 값의 추가 삭제도 가능하고 배열처럼 조회도 가능하기 떄문이다. 물론 그에 따른 장단점은 존재하지만.

  - LinkedList는 순서가 없다. 하나하나의 객체가 head를 가지고 그 head를 참조하며
  연속적으로 객체들이 꼬리를 물고 이어져있는 형식이다. 따라서 값의 조회에는 head를 계속 찾아가야 한다늦 점에서 오래걸리지만 추가 삭제에서는
  단순히 삭제나 추가후 앞뒤, 추가된 객체의 head 의 참조값만 바꿔주면 되기 떄문에 굉장히 효율적이다.
  - Vector클래스는 ArrayList와 유사한 기능을 제공하지만 만들어진지 오래됐으며 멀티스레드 환경에서 유리하다는 장점이외에는 일반적으로 사용되지 못하고 있다.

 

3.  Set 컬렉션이란?



-Set 컬렉션


  Set인터페이스는 아래로 HashSet,LinkkedHashSet, Treeset(SortedSet 인터페이스를 구현하는 클래스)로 이루어져있다.
  set은 쉽게 말하자면 우리가 알고 있는 List에서 순서가 없고(TreeSet의 값의 저장은 순서에 관계없이 크기에 따라 오름차순 정렬됨 다만
  객체를 저장할때는 객체가 갖고 있는 인스턴스 멤버에 따라 오름차순 되지 않음(당연한말). 아마 주소값을 해시코드를 이용한다던지 그런    원리일 것 같은데 자세히는 모르겠음. 아무튼 순서가 지 멋대로라는 것, HashSet은 저장순서, 값의크기에 관계없이 무작위로 저장됨)
  ** 순서가 없다는 것의 정확한 정의는 자료향에 값을 저장할 때 몇번쨰로 저장했는지 기억하지 않는다는 것. 다만 그냥 값의 크기를              비교해서 순서대로 넣어주는 것 뿐.
  중복을 허용하지 않고 값을 오름차순으로 정렬한다는 특징 이외에는 비슷하다고 보면 된다.
  단 순서가 없기에 인덱스로 접근해서 값을 추출하는 메서드같은 것은 없으며 객체의 요소들을 확인하기 위해서는 for문이나 반복가능한        객체를 iterator를 이용해 생성해주어야 한다.

 

4. Map 컬렉션이란?


-Map 컬렉션


  Map컬렉션은 HashMap, LinkedHashMap, TreeMap, HashTable, TreeMap(SortedMap 인터페이스를 구현하는 클래스) 클래스   들로 구성돼있다. Map은 파이썬의 딕셔너리라고 생각하면 된다. 즉 키와 값을 같이 가질 수 있는 자료형이다.
 HashMap은 이러한 키와 value를 순서없이 저장하고 TreeMap은 TreeSet과 마찬가지로 키를 기준으로 정렬해준다.

 

 

 

아무래도 개인적으로 정리한 글이라 가독성 및 자료의 질이 많이 부족한 것 같다. 이런 기본적인 개념에 대한 포스팅은 구글링하면 워낙에 많이 나오는 방대한 정보다보니 앞으로는 코드 동작원리나 메서드 원리 등 조금 더 이론적이고 원론을 다루는 주제에 대해 포스팅 하겠다.