변수, 연산자, 조건문, 반복문, 배열.. 은 생략한다.
컬렉션은 참조형 변수를 저장하는 참조형 배열이라고 생각하면 된다.
참조형 변수?
기본형 -> 값을 직접 저장 (스택 영역, 정적)
참조형 -> 힙 영역(동적)에 저장된 값을 스택 영역에 저장된 메모리 주소를 통해 접근함
그래서 컬렉션을 사용할 때 int,char가 아닌 Integer,Character,String등을 사용하는 것이다.
컬렉션의 종류로는 List, Queue, Set, Map가 있다고 할 수 있고, 사실 Collection 인터페이스는 List,Queue,set 으로 분류되고 나머지 Map은 Collection 인터페이스를 상속하지는 않지만 그냥 Collection으로 분류한다.
순서가 있는 데이터의 집합, 중복도 허용
ArrayList : 단방향 포인터 구조, 각 데이터에 대한 인덱스가 있어 조회 성능이 좋음
LinkedList : 양방향 포인터 구조, 데이터의 삽입, 삭제에 유리. 특히 스택, 큐, 양방향 큐 생성에 사용
add,get,set,remove,clear
ArrayList <Integer> int_list = new ArrayList <>();
int_list.add(1); // index=0에 1이 들어간 것.
int_list.add(9); // index=1에 9가 들어간 것.
int_list.add(0,123); // index=0에 123이 들어간 것. 기존에 있던 거는 삽입 index이후로 1씩 밀린다.
ArrayList <Integer> int_list = new ArrayList <>();
int_list.add(1); // index=0에 1이 들어간 것.
System.out.println(int_list.get(0)); // 1이 출력됨
ArrayList <Integer> int_list = new ArrayList <>();
int_list.add(1); // index=0에 1이 들어간 것.
int_list.set(0,10);// set 수정
System.out.println(int_list.get(0)); // 10이 출력됨
ArrayList <Integer> int_list = new ArrayList <>();
int_list.add(1); // index=0에 1이 들어간 것.
int_list.add(9); // index=0에 1이 들어간 것.
int_list.remove(0);
System.out.println(int_list.get(0)); //9가 출력된다.
순서가 없는 데이터의 집합, 중복 미허용
HashSet : 접근 속도가 가장 빠르지만 순서 예측 불가능TreeSet : 정렬 방법 지정 가능 add,remove,clear,contains
Set <Integer> intS = new HashSet <>();
intS.add(4);
intS.add(1);
intS.add(1); //무시
intS.add(2);
intS.add(3);
intS.add(3);// 무시
for(Integer v:intS){
System.out.println(v);
}//1,2,3,4 출력함
Set <Integer> intS = new HashSet <>();
intS.add(4);
System.out.println(intS.contains(4)); //true
List와 유사한 구조
LinkedList :PriorityQueue : FIFO가 아닌 우선순위가 높은 순서대로 나가는 Queue add,poll,peek
Queue <Integer> intQ = new LinkedList <>();
intQ.add(1);
intQ.add(9);
Queue <Integer> intQ = new LinkedList <>();
intQ.add(1);
intQ.add(9);
while(! intQ.isEmpty()){
int ret = intQ.poll(); // 1, 9 순으로 ret에 저장됨
System.out.println(ret); // 1, 9 순으로 출력됨
}
Queue <Integer> intQ = new LinkedList <>();
intQ.add(1);
intQ.add(9);
while(! intQ.isEmpty()){ // 무한 루프임
int ret = intQ.peek(); // 1만 ret에 저장됨
System.out.println(ret); // 1만 출력됨
key:value 쌍으로 이뤄진 집합. key의 중복을 허용하지 않음.
Hashtable : HashMap보다 느리지만 동기화 지원, null 불가HashMap : 중복 미허용, 순서 미지정, null가능TreeMap : 정렬된 순서대로 Key와 Value를 저장하여 검색이 빠름 put,get,ketSet,values,remove,clear...
Map <String, Integer> intMap = new HashMap <>();
intMap.put("일",1);
intMap.put("월",2);
intMap.put("화",3);
intMap.put("월",4); //덮어쓰기
Map <String, Integer> intMap = new HashMap <>();
intMap.put("일",1);
intMap.put("월",2);
intMap.put("화",3);
intMap.put("월",4);
System.out.println(intMap.get("월"));//4 출력
Map <String, Integer> intMap = new HashMap <>();
intMap.put("일",1);
intMap.put("월",2);
intMap.put("화",3);
intMap.put("월",4);
for(String key : intMap.keySet()){
System.out.println(key); //월 화 일 출력함
Map <String, Integer> intMap = new HashMap <>();
intMap.put("일",1);
intMap.put("월",2);
intMap.put("화",3);
intMap.put("월",4);
for(Integer key : intMap.values()){
System.out.println(key);//4,3,1, 출력함