2020년 11월 27일 9시 ~ 15시 30분 zoom으로 수업 진행
컬렉션
메모리상에서 자료를 구조적으로 처리하는 방법을 자료구조라 일컫는데
컬렉션은 자바에서 제공하는 자료구조를 담당하는 프레임워크
추가 삭제 정렬 등의 기능처리가 간단하게 해결되어 자료구조적 알고리즘을 구현할 필요 없음
java.util 패키지에 포함, 인터페이스를 통해 정형화된 방법으로 다양한 컬렉션 클래스 이용 가능
자료구조
데이터(자료)를 메모리에서 구조적으로 처리하는 방법론이다.
배열의 문제점
1. 한번 크기를 지정하면 변경할 수 없다
- 공간 크기가 부족하면 에러 발생 -> 할당 시 넉넉한 크기로 할당하게 됨(메모리 낭비)
- 필요에 따라 공간을 늘리거나 줄일 수 없음
2. 배열에 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불편하다
- 추가, 삭제할 데이터부터 마지막 기록된 데이터까지 하나씩 뒤로 밀어내고 추가해야 함(복잡함)
3. 한 타입의 데이터만 저장 가능하다.
컬렉션의 장점
1. 저장하는 크기의 제약이 없다
2. 추가 삭제 정렬 등의 기능 처리가 간단하게 해결된다
- 자료를 구조적으로 처리하는 자료구조가 내장되어 있어 알고리즘 구현이 필요 없음
3. 여러 타입의 데이터가 저장 가능하다
- 객체만 저장할 수 있기 때문에 필요에 따라 기본 자료형을 저장해야 하는 경우 Wrapper 클래스 사용
List
자료들을 순차적으로 나열한 자료구조, 인덱스로 관리되며, 중복해서 객체 저장 가능
구현 클래스로 ArrayList와 Vector , LinkedList 가 있음
ArrayList
List의 후손으로 초기 저장 용량은 10으로 자동 설정되며 따로 지정도 가능
저장 용량을 초과한 객체들이 들어오면 자동으로 늘어나며 고정도 가능
동기화(Synchronized)를 제공하지 않음
Vector
List의 후손, ArrayList와 동등하지만 동기화(Synchronized)를 제공한다는 점이 ArrayList와 차이점
-> List 객체들 중에서 가장 성능이 좋지 않음.
LinkedList
List의 후손, 인접 참조를 링크해 체인처럼 관리
특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞/뒤의 링크만 변경하면 되기 때문에
객체 삭제와 삽입이 빈번하게 일어나는 곳에서는 ArrayList보다 성능이 좋음
Comparable , Comparator
정렬할 때 사용
package com.collection.part01.arrayList;
public class MTest {
public static void main(String[] args) {
ArrayListTest t = new ArrayListTest();
t.test();
}
}
package com.collection.part01.arrayList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;
public class ArrayListTest {
public void test() {
ArrayList alist = new ArrayList();
//다형성
List list = new ArrayList();
Collection clist = new ArrayList();
//저장 ArrayList는 객체만 저장 가능, index 적용 (순서 유지)
alist.add("apple");
alist.add(123);
alist.add(45.67);
alist.add(new Date());
//래퍼클래스를 통해 객체화 되어 들어간다, 오토박싱
System.out.println("alist : " + alist);
System.out.println();
//인덱스가 지정되어 있기에 for문으로 접근 가능
for(int i=0; i<alist.size(); ++i) {
System.out.println(alist.get(i));
}
System.out.println();
//중복허용
alist.add("apple");
System.out.println("alist : " + alist);
//원하는 인덱스에 객체 추가, 중간에 추가하느 ㄴ경우 하나씩 뒤로 밀린다,
alist.add(1, "banana");
System.out.println("alist : " + alist);
System.out.println();
//삭제
alist.remove(2);
System.out.println("alist : " + alist);
//수정
alist.set(1, new Boolean(true));
System.out.println("alist : " + alist);
System.out.println("-------------------------\n");
//
ArrayList alist2 = new ArrayList();
alist2.add("apple");
alist2.add("orange");
alist2.add("mango");
alist2.add("banana");
System.out.println("alist2 : " + alist2);
System.out.println();
//정렬
Collections.sort(alist2);
System.out.println("alist2 : " + alist2);
}
}
package com.collection.part01.arrayListSort;
public class MTest {
public static void main(String[] args) {
ScoreManager s = new ScoreManager();
s.scoreSort();
//list : [Score [name=햄서터, score=29], Score [name=민윤지, score=28], Score [name=정호슥, score=27]]
}
}
package com.collection.part01.arrayListSort;
public class Score implements Comparable{
private String name;
private int score;
public Score() {
super();
}
public Score(String name, int score) {
super();
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Score [name=" + name + ", score=" + score + "]";
}
@Override
public int compareTo(Object o) {
//name으로 기본 정렬
String otherName = ((Score)o).getName();
return name.compareTo(otherName);
//?.compareTo(!) 결과값이 음수면 !가 더 큰것, 양수면 ?가 더 큰 것, 0이면 둘이 같은 것
}
}
package com.collection.part01.arrayListSort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ScoreManager {
public void scoreSort() {
List list = new ArrayList();
//ArrayList는 List의 후손
list.add(new Score("남주니", 27));
list.add(new Score("석지니", 29));
list.add(new Score("미늉기", 28));
list.add(new Score("호서기", 27));
list.add(new Score("지미니", 26));
list.add(new Score("김태태", 26));
list.add(new Score("정구기", 24));
System.out.println("list : " + list);
System.out.println();
//Comparable 과 Comparator
//1. Comparable : Score에 상속
//정렬 기준을 정함
Collections.sort(list);
System.out.println("list : " + list);
System.out.println();
//2. Comparator
//class 생성 후 implements
Collections.sort(list, new ScoreScoreAsc());
System.out.println("list : " + list);
}
}
package com.collection.part01.arrayListSort;
import java.util.Comparator;
public class ScoreScoreAsc implements Comparator{
@Override
public int compare(Object o1, Object o2) {
//점수로 기본 정렬(오름차순)
int other1 = ((Score)o1).getScore();
int other2 = ((Score)o2).getScore();
if(other1 > other2) {
return 1;
//1 -> 바꾼다.
//return -1;
}
else if(other1 < other2){
return -1;
}
else {
return 0;
}
}
}
'기록 > 자바_국비' 카테고리의 다른 글
[배운내용정리] 1201 자바 국비교육 (0) | 2020.12.02 |
---|---|
[배운내용정리] 1130 자바 국비교육 (0) | 2020.12.02 |
[배운내용정리] 1126 자바 국비교육 (0) | 2020.11.29 |
[배운내용정리] 1125 자바 국비교육 (0) | 2020.11.29 |
[평가 후기] 1124 프로그래밍 기초 평가 후기 (0) | 2020.11.27 |