본문 바로가기

자료구조

자바 자료구조

자바의 자료구조는 크게 3가지인데 각각의 자료구조는 아래와 같이 Map, List, Set 으로 이루어져 있다.



각 자료구조 클래스는 아래와 같은 특징을 가진다.



  • List


List는 데이터를 순서에 맞게 일렬로 구성하는데, 인덱스가 부여되기 때문에 인덱스로 검색할 수 있다.

Set 과 는 다르게 중복을 허용한다. 


List 중 가장 많이 사용하는 클래스인 ArrayList에 대해 알아보자.


- ArrayList


ArrayList는 resizable-array이다. 즉 저장용량이 자동으로 늘어난다. 기본 생성자로 ArrayList를 생성하면 10개의 객체 저장공간을 가진다. 물론 처음부터 저장용량을 지정할 수 있다.


그리고 ArrayList는 Object타입으로 변환되기 때문에, 모든 종류의 객체를 저장할 수 있다. 하지만, 저장 및 조회할 때 Object로 변환해서 사용해야 하므로 성능이 좋지 않다. 이런 단점을 보완하는 것이 제너릭이다.


사용예)

기본 Object  List list = new ArrayList();

   list.add("value1");

   String name = (String)list.get(0);


제너릭 적용  List list = new ArrayList();

   list.add("value1");

   String name = list.get(0);


- ArrayList VS LinkedList


일반적으로 ArrayList는 LinkedList 보다 검색이 빠르다. 또한 순차적을 배열에 객체를 추가 및 삭제 하는 경우에도

ArrayList가 더 좋은 성능을 보인다.  반면에, 배열의 중간 위치에 추가 될 때 LinkedList는 Array 크기를 조정하거나, 

인덱스를 업데이트 할 필요가 없기 때문에 링크된 목록에서 객체의 추가, 제거 작업은 LinkedList가 ArrayList보다 더 빠르다. 하지만 LinkedList는 앞뒤 두개의 참조를 저장하기 때문에 ArrayList보다 더 많은 메모리 영역을 차지하게 될 것이다.



  • Set
Set은 중복된 요소를 포함할 수 없다. List와 다르게 인덱스를 사용하지 않기 때문에, 인덱스 매개변수가 없다. 


-Sorting

set 클래스의 정렬 방식은 클래스마다 다르다.


-HashSet: 랜덤

-LinkedHashSet: 입력 순서대로

-TreeSet: comparator에 의해서



  • Map
Map은 Key와 Value로 구성된 객체를 저장한다. 키는 중복 저장될 수 없다. 

-LinkedHashMap

입력된 순서를 기억하는 HashMap이다. 아래와 하면 입력한 순서대로 출력하는 것을 확인할 수 있다. 
물론 그냥 HashMap은 순서대로 출력되지 않는다.

Map<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("이름","Kim");
linkedHashMap.put("나이","15");
linkedHashMap.put("직업","공무원");
linkedHashMap.put("사는 곳","서울");

linkedHashMap.forEach((key, value)-> System.out.println(key+ value));