헬린코린이
[JAVA] 컬렉션 프레임워크 본문
컬렉션 프레임워크에 이야기하겠다.
최상위 클래스에는 Collection클래스가 존재하고
Collection클래스 자식 클래스로는
List Set 클래스가 있고 Map클래스는 외톨이이다.
List는 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용하고
Set는 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않고
Map은 키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없고.
이때 키는 중복을 허용하지 않지만, 값은 중복될 수 있습니다.
List를 구현하는 클래스는 Vector, ArrayList, LinkedList, Stack, Queue가 있다.
가장 많이 사용하는 ArrayList를 알아보겠다.
ArrayList는 배열을 다루는 클래스인데
일반 우리가 사용하는 배열보다 더 간편하게 다룰 수 있다.
예제를 보겠다.
public class Test02 {
public static void main(String[] args) {
ArrayList<Integer> al = new ArrayList<>();
System.out.println(al.size()); //배열은 length();로 길이를 알아보지만 배열리스트는
//Size();로 길이를 안다 기능은 똑같다.
al.add(10); //배열리스트에 추가하는 메서드이다.
al.add(3.14);
al.add("apple");
al.add('A');
al.add(new B());
al.add(new C());
System.out.println(al.size());
System.out.println(al); //ArrayList클래스 안에는 toString메서드가 정의되어있다.
al.add(1,123);
System.out.println(al);
System.out.println(al.get(0)); //ArrayList의 0번째 인덱스의 값을 반환한다.
System.out.println(al.get(6));
System.out.println(al.isEmpty()); //ArrayList가 비어있는지 확인하는 메서드이다.
al.remove(0); //ArrayList를 지우는 메서드이다.
System.out.println(al);
al.clear(); //ArrayList의 전부를 지우는 메서드이다.
System.out.println(al);
System.out.println(al.isEmpty());
}
}
리스트는
- 첫 생성에 전체 크기를 결정하지 않음
- 매번 새로 추가할 수 있음
+) 데이터 삽입, 삭제 유리
-) 느린 접근이라는 단점이 있다.
ArrayList는 저장되는 데이터 타입이 달라도 상관없다. 하지만
저장할 데이터들의 타입을 강제하는 것이 개발에는 더 도움됨
컬렉션에 저장될 데이터들의 타입을 강제하는 문법 == “제네릭”이다. 이건 마지막에 다루겠다.
Set를 구현하는 클래스는 HashSet, TreeSet이 있다.
Set의 예제를 보겠다.
public class Test04 {
public static void main(String[] args) {
Set set = new HashSet(); //추상클래스 집합에게는 다양한 종류의 클래스가 존재함
// 최상의 집합 클래스가 Set.
set.add(10);
set.add(20);
set.add(1);
set.add(2);
set.add(123);
set.add(10);
set.add(20);
System.out.println(set);
System.out.println(set.size());
}
}
Set클래스의 메서드도 List클래스의 메서드와 동일하다.
다만 Set클래스는 추상 클래스라 직접 객체를 생성할 수는 없고 HashSet이나 TreeSet으로 객체를 생성해야 한다.
Map클래스를 구현하는 HashMap, TreeMap, Hashtable, Properties가 있다.
Map클래스는 앞서 List, Set클래스와 다르다. 이유는 List, Set클래스는 Collection클래스의 자손 클래스이지만
Map은 아니다.
코드를 보겠다.
public class Test07 {
public static void main(String[] args) {
Map map = new HashMap();
map.put(101, "홍길동");
map.put(102, "임꺽정");
System.out.println(map);
System.out.println(map.size());
System.out.println(map.get(101));
}
}
Map클래스도 마찬가지로 추상 클래스여서 객체를 생성할 수 없기에
자식 클래스로 객체를 만들어야 한다. Set, Map클래스는 일반적으로 HashSet, Map클래스로 객체를 만든다.
Map클래스는 put으로 값을 입력한다. Map클래스는 키와 값을 가진다.
앞서 이야기한 것처럼 키는 중복을 허용하지 않지만 값은 중복을 허용한다.
예를 들어 우리가 일반적으로 사용하는 아이디 비밀번호가 있을 때
아이디는 똑같을 수가 없다
하지만 비밀번호는 똑같은 비밀번호를 가질 수 있다.
마지막에 언급하기로 한 지네릭이란 건
ArrayList<Integer> datas = new ArrayList<Integer>();
<> 안에 타입을 정의해주는데 ArrayList에는 Integer타입만 들어올 수 있다는 것이다. Integer타입 말고도 여러 가지 타입을 넣을 수도 있고
클래스도 넣을 수도 있다. 한번 가지고 놀아보면 좋을 듯싶다.
근데 왜 int타입이 아니라 Integer가 정수인지 궁금할 것이다.
자바는 객체지향 프로그램이지만
100%는 아니다 그 이유가 바로 기본형 타입 때문이다.
그래서 자바는 기본형 타입을 객체화하기 위해
Wrapper class라는 걸 만들었습니다.
기본형 타입에 앞에 대문자만 붙여주면 되지만 딱 2개 int, char타입만 다르게 작성한다.
int == Integer
char == Character