[33] Java Collections Framework
* 자바 컬렉션 프레임워크
- java.util.ArrayList
- 객체를 수집하여 저장하여 두었다가 요청이 있을시 저장소에서
추출하여 제공하는것을 목적으로 함.
- 배열의 단점을 개선한 클래스로 객체만 저장할 수 있다.
- int등 각종 기본 데이터 타입을 저장하려면 Integer Wrapper Class 등으로 변환해서 사용해야 한다.
- 배열의 크기는 변경이 불가능하나 ArrayList, Vector는 동적인 크기 변경이 가능하다.
* Collection Framework의 핵심 인터페이스
- List : 순서가 있는 데이터의 집합. 데이터의 중복을 허용
배열기반. 순서를 유지. 중복허용
매개변수가 중요.
ArrayList Iterator Vector Collectors
- Set : 순서를 유지하지 않는 데이터의 집합
중복허용안함.
- Map : key, value쌍으로 이뤄져 있음. 순서유지하지 않음.
key 중복불가능
value 중복가능
우편번호,지역번호
* 다형성
- 상속을 해야지만 다형성을 이룰수 있음.
- 생성된 객체가 자식일때 성립.
- 자식타입이 부모로 갈 때는 형변환 생략 가능
- 부모타입이 자식으로 갈 때는 형변환 반드시 지정.
----------------------------
package oop9jcf;
class Data {
String title="롯데시네마";
String date="2012-05-07";
String content="어벤저스";
}
//=======================
class Container {
Data data = null;
public void save(Data data){
this.data = data;
}
public Data load(){
return data;
}
}
//======================
public class JcfEx1 {
public static void main(String[] args) {
Container cont=new Container();
Data data=new Data();//롯데시네마 2012-05-07 어벤저스
cont.save(data);
Data dt=cont.load();//롯데시네마 2012-05-07 어벤저스
System.out.println(dt.title);
System.out.println(dt.date);
System.out.println(dt.content);
//Data 객체가 10000 생성해야 한다면?
Data dt2=new Data();//롯데시네마 2012-05-07 어벤저스
}
}
----------------------------------
package oop9jcf;
class ContainerObj{
Object data = null;
public void save(Object data){
this.data = data;
}
public Object load(){
return data;
}
}
//=================
public class JcfEx2 {
public static void main(String[] args) {
Data data=new Data();
ContainerObj cont=new ContainerObj();
//첫번째 경우
cont.save(data);
//Object타입 사용시 원래의 타입으로 형변환 필요.
Data dt=(Data)cont.load();
System.out.println(dt.title);
System.out.println(dt.date);
System.out.println(dt.content);
//두번째 경우 String객체
cont.save("오필승코리아");
String str=(String)cont.load();//오필승코리아
System.out.println(str);
//세번째 경우 Integer객체
cont.save(new Integer("123"));
Integer ii=(Integer)cont.load();
System.out.println(ii.intValue());
//123.45 jdk 1.4권장사항 아님
cont.save(new Double("123.45"));
Double dd=(Double)cont.load();
System.out.println(dd.doubleValue());
}
}
-------------------------------------------
package oop9jcf;
import java.util.ArrayList;
class Jumsu{
String name="";
int kor = 0;
int eng = 0;
int mat = 0;
int aver= 0;
public Jumsu() {}
public Jumsu(String name, int kor, int eng, int mat) {
this.name = name;
this.kor = kor;
this.eng = eng;
this.mat = mat;
this.aver=(kor+eng+mat)/3;
}
}
//======================
public class JcfEx3 {
public static void main(String[] args) {
Jumsu one =new Jumsu("무궁화",70,80,40);
Jumsu two =new Jumsu("진달래",40,50,30);
Jumsu three=new Jumsu("봉선화",50,80,90);
// 저장공간 선언, 메모리 자동 할당 및 증가
ArrayList list=new ArrayList();//ctrl+shift+o
list.add(one);
list.add(two);
list.add(three);
System.out.println("list객체 요소 갯수 "+list.size());
Jumsu jj=(Jumsu)list.get(2);//2번째 요소 가져옴
System.out.println(jj.name);
System.out.println(jj.kor);
System.out.println(jj.eng);
System.out.println(jj.mat);
System.out.println(jj.aver);
//반복문을 활용해서 전체 요소 출력
int size=list.size(); //3
int idx;
for(idx=0; idx<size; idx++)
{
jj=(Jumsu)list.get(idx);
System.out.print(jj.name+" ");
System.out.print(jj.kor+" ");
System.out.print(jj.eng+" ");
System.out.print(jj.mat+" ");
System.out.print(jj.aver+" ");
System.out.println();
}
}
}
-----------------------------------------
package oop9jcf;
import java.util.ArrayList;
import java.util.Iterator;
//import java.util.*;
public class IterEx4 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new Integer(10));
list.add(new Integer(20));
list.add(new Integer(30));
list.add(new Integer(40));
list.add(new Integer(50));
int idx;
for(idx=0; idx<list.size(); idx++)
{
Integer ii=(Integer)list.get(idx);
System.out.println(ii);
}
/*
//Iterator형으로 변환된 형태로 반환
Iterator iter=list.iterator();
//가져올 요소가 있는지 검사, true false값으로 반환
//가져올 요소가 없으면 false반환
while(iter.hasNext())
{
Integer ii=(Integer)iter.next();//요소가져오기
System.out.println(ii.intValue());
}
*/
//subList(시작값,끝값-1)
//list=10 20 30 40 50
ArrayList list2=new ArrayList(list.subList(1, 3));
System.out.println(list2);
list2.add("B");//요소추가
list2.add("C");
System.out.println(list2);
//원하는 위치에 요소 추가하기
list2.add(0, "A");
System.out.println(list2);
//요소값 수정
list2.set(3, "HAPPY");
System.out.println(list2);
//list=10 20 30 40 50
//list2=A 20 30 HAPPY C
//요소삭제
list2.remove(3);
System.out.println(list2);
//list2에서 list에 포함된 객체들을 삭제함
for(int i=list2.size()-1;i>=0;i--){
if(list.contains(list2.get(i))) list2.remove(i);
}
System.out.println(list2);
}
}
---------------------------------------------------set 예제
HashSet hs=new HashSet();
hs.add("happy");
hs.add("seoul");
hs.add("sky");
hs.add("sky");
System.out.println(hs.size());
----------------------------------------------------map 예제
HashMap hm=new HashMap();
hm.put(one", "대한민국");
hm.put("two", "오필승코리아");
hm.put("three", "오필승코리아");
System.out.print(hm.get(one"));