quilt code

[고급자바] 컬렉션 프레임워크 (1) 본문

daily/고급자바

[고급자바] 컬렉션 프레임워크 (1)

김뱅쇼 2023. 1. 30. 21:10

1. ArrayList

기본 용량값 : 10;
List list1 = new LinkedList<>();
1. add() : 데이터 추가
list1.add("aaa");
list1.add("bbb");
list1.add(new Integer(111));
list1.add('k');
list1.add(true);
list1.add(12.34);
2. size() : 데이터 개수 조회
System.out.println("size => " + list1.size());
size => 6
3. get() : 데이터 꺼내기
System.out.println("1번째 자료 : " + list1.get(0));
1번째 자료 : aaa
4. 데이터 끼워넣기도 add 사용
(인덱스 번호 넣기)
list1.add(0, "zzz");
System.out.println("list1 => " + list1);
list1 => [zzz, aaa, bbb, 111, k, true, 12.34]
5. 데이터 변경하기
String temp = (String) list1.set(0, "YYY");
System.out.println("temp => " + temp);
System.out.println("list => " + list1);
temp => zzz
list => [YYY, aaa, bbb, 111, k, true, 12.34]
6. 데이터 삭제하기
list1.remove(0);
System.out.println("삭제 후 : " + list1);

list1.remove("bbb");
System.out.println("bbb 삭제 후 : " + list1);

list1.remove(new Integer(111));
System.out.println("111 삭제 후 : " + list1);
삭제 후 : [aaa, bbb, 111, k, true, 12.34]
bbb 삭제 후 : [aaa, 111, k, true, 12.34]
111 삭제 후 : [aaa, k, true, 12.34]
7. 제너릭을 지정하여 선언 가능
List<String> list2 = new ArrayList<>();
list2.add("AAA");
list2.add("BBB");
list2.add("CCC");
list2.add("DDD");
list2.add("EEE");

for(String s : list2){
System.out.println(s);
}
AAA
BBB
CCC
DDD
EEE
8. contains(비교객체) : 리스트에 '비교객체'가 있으면 true, 없으면 false로 반환
System.out.println(list2.contains("DDD"));
System.out.println(list2.contains("ZZZ"));
true
false
9. indexOf(비교객체) : 리스트에 '비교객체'를 찾아 '비교객체'가 있는 index 값을 반환함. 없으면 -1 반환함
System.out.println("DDD의 index값 : " + list2.indexOf("DDD"));
System.out.println("ZZZ의 index값 : " + list2.indexOf("ZZZ"));
DDD의 index값 : 3
ZZZ의 index값 : -1
10. ArrayList 삭제처리하기
for(int i=0; i<list2.size(); i++) {
list2.remove(i);
}
삭제 처리 후 arrayList 크기 : 2

 

 

2. StackQueue

  • Stack : 후입선출(LIFO)의 자료구조
  • Queue : 선입선출(FIFO)의 자료구조
  • Stack과 Queue는 LinkedList를 이용하여 구현할 수 있음
1. Stack의 명령
  1) 자료 입력 : push(저장할 값) 
  2) 자료 출력: pop( ) => 자료를 꺼내온 후 꺼내온 자료를 stack에서 삭제한다.
stack.push("홍길동");
stack.push("일지매");
stack.push("변학도");
stack.push("강감찬");
System.out.println("현재 stack값들 : " + stack);

String data = stack.pop();
System.out.println("꺼내온 자료 : " + data);
System.out.println("꺼내온 자료 : " + stack.pop());
System.out.println("현재 stack값들 : " + stack);

stack.push("성춘향");
System.out.println("현재 stack값들 : " + stack);
System.out.println("꺼내온 자료 : " + stack.pop());
현재 stack값들 : [강감찬, 변학도, 일지매, 홍길동]
꺼내온 자료 : 강감찬
꺼내온 자료 : 변학도
현재 stack값들 : [일지매, 홍길동]
현재 stack값들 : [성춘향, 일지매, 홍길동]
꺼내온 자료 : 성춘향
2. Queue의 명령
  1) 자료 입력 : offer(저장할 값)
  2) 자료 출력 : poll() => 자료를 Queue에서 꺼내온 후 꺼내온 자료는 Queue에서 삭제된다.
LinkedList<String> queue = new LinkedList<>();
queue.offer("홍길동");
queue.offer("일지매");
queue.offer("변학도");
queue.offer("강감찬");

System.out.println("현재 queue의 값 : " + queue);

String temp = queue.poll();
System.out.println("꺼내온 자료 : " + temp);
System.out.println("꺼내온 자료 : " + queue.poll());
System.out.println("현재 queue값들 : " + queue);

if(queue.offer("성춘향")) {
System.out.println("신규 등록 자료 : 성춘향");
}
System.out.println("현재 queue의 값 : " + queue);
System.out.println("꺼내온 자료 : " + queue.poll());
}
현재 queue의 값 : [홍길동, 일지매, 변학도, 강감찬]
꺼내온 자료 : 홍길동
꺼내온 자료 : 일지매
현재 queue값들 : [변학도, 강감찬]
신규 등록 자료 : 성춘향
현재 queue의 값 : [변학도, 강감찬, 성춘향]
꺼내온 자료 : 변학도

 

 

3. ListSort

  • 정렬과 관련된 Interface는 Comparable과 Comparator가 있다
  • 보통 객체 자체에 정렬 기능을 넣기 위해서는 Comparable을 구현하고 정렬 기준을 별도로 구현하고 싶을 때는 Comparator를 구현하여 사용하면 된다
  • Comparable에서는 compareTo()메소드를 구현해야하고 Comparator에서는 compare()메소드를 구현해야한다
List<String> list = new ArrayList<>();

list.add("일지매");
list.add("홍길동");
list.add("성춘향");
list.add("변학도");
list.add("이순신");

System.out.println("정렬 전 : " + list);
정렬 전 : [일지매, 홍길동, 성춘향, 변학도, 이순신]
정렬은 Collections.sort() 메소드를 이용하여 정렬함
정렬은 기본적으로 '오름차순' 정렬을 수행함
정렬방식을 변경하려면 정렬방식을 결정하는 객체를 만들어서 Collecitons.sort()메소드에 인수로 넘겨주면 됨
Collections.sort(list); // 정렬하기
System.out.println("정렬 후 : " + list);

Collections.shuffle(list); // 데이터 섞기
System.out.println("자료 섞기 후 : " + list);
정렬 후 : [변학도, 성춘향, 이순신, 일지매, 홍길동]
자료 섞기 후 : [성춘향, 일지매, 변학도, 이순신, 홍길동]