컬렉션(collection)
JDK는 자료구조 과목에서 배운 많은 것들을 컬렉션으로 만들어 제공한다.
이것들은 매우 유용하게 사용되기 때문에 꼭 알아둘 필요가 있다.
컬렉션에는 Vector, ArrayList, LinkedList, HashMap등이 있다.
컬렉션의 특징
- 컬렉션은 제네릭으로 만들어져 있다.
- 요소는 객체만 가능하다 ( int X, Integer O)
Vector<Integer> v = new Vector<Integer>();
제네릭의 개념
ArrayList<E> 라는 것을 본 적이 있을 것이다. 여기서 E는 여러 종류의 타입으로 변신할 수 있도록 컬렉션을 일반화시키기 위해 사용한다.
ArrayList<E>라고 하면 ArrayList에 Integer도 String도 모두 넣을 수 있다.
<E>를 구체화시켜서 ArrayList<Integer>라고 하면 ArrayList에는 Integer만 들어갈 수 있다.
제네릭은 C++의 템플릿과 동일하다.
자바의 제네릭은 클래스 코드를 찍어내듯이 생산할 수 있도록 일반화(generic)시키는 도구이다.
제네릭 타입 매개변수는 보통 다음과 같다.
E : Element
T : Type
V : Value
K : Key
제네릭은 개발자가 스스로 만들 수도 있다. 이에 대해서는 추후에 포스팅할 예정이다.
컬렉션의 종류
Vector
벡터는 가변 배열이라고 생각하면 된다.
배열은 크기가 정해져있지만, 벡터는 자동으로 크기를 조절하고, 요소의 수정, 삭제에 따라 자동으로 자리를 이동해준다.
또 멀티스레드간의 동기화를 지원한다.
Vector<Integer> v = new Vector<Integer>(); // 백터생성
v.add(5) //요소추가
v.add(4)
v.remove(1) //1번째 인덱스의 요소 삭제
ArrayList
ArrayList는 Vector와 같이 가변 배열이다.
벡터와의 차이는 ArrayList는 스레드간의 동기화를 지원하지 않는다. 따라서 다수의 스레드가 동시에 ArrayList에 요소를 삽입하거나 삭제할 때 데이터가 훼손될 우려가 있다. 하지만 멀티스레드 동기화를 위한 시간 소모가 없어서 단일 스레드에서는 Vector보다 더 빠르다.
ArrayList<Integer> a = new ArrayList<Integer>(); // 백터생성
a.add(5) //요소추가
a.add(4)
a.remove(1) //1번째 인덱스의 요소 삭제
a.get(0) // 0번째 인데스 요소 반환 //5
HashMap
hashmap은 key와 value로 이루어진 한 쌍이 요소이다.
HashMap<String, String> a = new HashMap<Integer>(); // 백터생성
a.put("사과", "apple") //요소 추가
String apple = a.get("사과") //요소 검색
hashMap에 put()으로 데이터를 저장할 때
key를 이용해 해시함수를 실행하고 해시함수가 리턴하는 위치에 키와 값을 저장한다.
get()으로 데이터를 검색할 때는
key를 이용해 해시함수를 실행하여 저장된 위치를 알아내서 값을 리턴한다.
해시맵의 장점
1. 요소의 삽입, 삭제 시간이 매우 빠르다.
- 벡터나 arrayList와 달리 요소가 삽입되거나 삭제될 때 요소의 이동이 필요하지 않기 때문
2. 검색이 매우 빠르다
- 해시값으로 key가 저장된 위치를 바로 찾아가기 때문
LinkedList
linkedlist는 아래와 같이 생긴 리스트를 말한다. 우리가 자료구조 시간에 배운 그 linkedlist이다.
linkedlist도 new로 생성하고 add, get함수로 접근이 가능하다.
linkedlist는 빠르게 맨앞, 맨뒤에 접근이 가능하고, 빠르게 중간에 요소를 삽입할 수 있다. 또 인덱스를 이용하여 요소에 접근할수도 있다.
Collections클래스의 활용
java.util패키지에 포함된 Collections클래스는 컬랙션을 다루는 유용한 메소드들을 포함하고 있다.
- sort() : 요소 정렬
- reverse() : 요소를 거꾸로 정렬
- max(), min() : 최댓값, 최솟값 반호나
- binarySearch() : 이진탐색
LinkedList<String> myList = new LinkedList<>();
myList.add("a");
myList.add("b");
Collections.sort(myList); //정렬
Collections.reverse(myList); //거꾸로정렬
'java' 카테고리의 다른 글
[Java] JDK 설치하기 (0) | 2022.02.26 |
---|---|
[spring] @RequestBody, @ResponseBody 란, 스프링 데이터 주고받기 (0) | 2021.11.30 |
[JAVA] 추상클래스, 추상메소드와 인터페이스의 개념과 차이점 (0) | 2021.10.21 |
[java] 상속 개념 정리, extends (0) | 2021.10.20 |
eclipse오류 해결 (0) | 2021.09.17 |