Open JustKode opened 2 years ago
자바에는 자료구조에 관련된 Collections 라는 패키지가 있고 크게 LIst, Set, Map 으로 나뉘는데 이는 각각 python의 list, set, dict와 유사하다. 이 중 List와 Set은 Collections 라는 인터페이스를 상속 받는다
c++에서 STL을 이용하여 자료구조를 표현할 때 템플릿 문법을 사용했던 것처럼 자바에서도 제네릭 문법을 사용하여 해당 자료구조들을 구현할 수 있다
List는 크게 Vector(stack), ArrayList, LinkedList 로 나뉘는데 Vector는 삽입은 느리지만 탐색이 빠르다, 그리고 이 vector를 개선한 것이 ArrayLIst로 자바에서 list를 구현할 때 아주 많이 사용된다. 마지막으로 LinkedList는 ArrayList와는 반대로 삽입은 빠르지만 탐색은 좀 느리다.
LIst에서 sort 메서드를 사용할 때는 자바스크립트의 callback함수 처럼 Comparator 객체를 List.sort() 안에서 구현해줘야 한다 내부의 compare 메서드를 오버라이드 하며 상황에 맞게 -1, 0, 1을 return하게 구현하면 된다.
Set은 일반적인 Set인 HashSet이 있고 저장순서를 보장하는 LinkedHashSet이 존재한다. 그리고 저장순서는 보장되지 않지만 정렬상태가 유지되는 TreeSet도 존재한다
Map이란 key, value 한 쌍으로 data를 저장하는데 일반적인 HashMap이 있고 삽입순서를 보장해주는 LinkedHashMap, 그리고 트리구조를 이용하여 키를 정렬할 수 있는 TreeMap 이 존재한다.
Hash로 시작하는 collections 들은 hash 구조 특성상 자료의 삽입 순서 등은 보장하지 않지만 탐색이 빠르다.
Collections
패키지가 있다. Collections
패키지는 List
, Set
, Map
이라는 크게 3가지 인터페이스로 이루어지는데, 그 중 List
와 Set
은 Collection
이라는 인터페이스를 상속받는다.Collections
패키지에 구현된 자료구조 클래스들은 (C++의 탬플릿 문법과 유사한) 제너릭 문법을 통해 활용한다. (ex. (원시 타입) <(타입 변수)> (객체 이름) = new (원시 타입) <타입 변수>;
, ArrayList<Integer> arraylist = new ArrayList<Integer>;
)void sort(Comparator c)
같은 경우, 익명 객체를 사용해 적절한 Comparator<T>
를 삽입하고, 그 안에서 int compare()
메소드를 오버라이딩해, 프로그램 목적에 맞게 -1, 0, 1을 return하도록 구현하면 된다.Collections -자료를 쉽게 관리하기 위해 Java에서 제공하는 패키지 -대표적으로 List, Set, Map으로 나뉨.
List -순서가 있는 데이터의 집합이며 중복을 허용한다. -ArrayList, LinkedList, Stack, Vector -Vector는 삽입이 느리지만 탐색이 빠르고 LinkedList는 삽입이 빠르지만 탐색이 느림. ArrayList는 벡터와 동일한 기능.
제너릭 문법
-ex) ArrayList
Set -순서가 없으며, 중복을 허용하지 않음 -HashSet, LinkedHashSet, TreeSet -HashSet은 Hash Table을 이용하여 데이터를 빠르게 접근 가능하도록 만들었지만 저장 순서가 보장되진 않음(LinkedHashSet)은 가능. -TreeSet은 삽입은 느리지만 탐색은 빠른 Tree 구조로 저장 순서를 유지하지 않지만, 정렬 상태를 유지 가능.
Map -키, 값 쌍이 있는 데이터 집합 -HashMap, HashTable, LinkedHashMap, TreeMap
Java에는 동일한 규격을 위한 많은 데이터를 쉽게 관리하기 위한 collection이 존재하고, 대표적인 인터페이스는 list, set, map이 있다.
collection 패키지에 구현된 클래스들은 템플릿 문법과 유사한 제너릭 문법을 사용한다.
list 인터페이스에는 vector, arraylist, linkedlist가 존재하는데, vector은 삽입이 오래걸리나 탐색이 빠른 자료구조, arraylist는 vector 자료구조를 개선한 버전, linkedlist는 삽입은 빠르지만 탐색이 느린 자료구조이다.
set 인터페이스는 hashset, linkedhashset, treeset이 존재하는데, hashset은 hash table을 이용해 저장 순서를 보장하진 않지만 데이터를 빠르게 접근할 수 있는 자료 구조이고, linkedhashset은 저장 순서를 보장하는 hashset이고, treeset은 저장 순서를 유지하진 않지만 정렬 상태 유지가 가능한 자료구조이다.
map 인터페이스는 hashmap, linkedhashmap, treemap이 존재하는데, hashmap은 정렬 필요 없이 빠른 키 값 접근이 가능한 자료구조이고, linkedhashmap은 삽입 순서를 유지하는 hashmap이고, treemap은 키 정렬 기능이 추가된 자료구조이다.
강의 자료 아래 이슈에 답글로 5줄 요약을 남겨 주세요.