컬렉션 프레임워크
배열의 단점을 개선한 클래스로 객체만 저장할 수 있습니다.
배열의 단점인 메모리 낭비를 피할수 있는 구조입니다.
동적인 크기 변경이 가능합니다.
자료를 효율적으로 정리하는것을 자료구조(Data structure)라 합니다.
자료구조 방법에는 Set계열, List계열, Map계열이 있습니다.
java는 java.util 패키지의 자바 컬렉션(JCF)에서 자료구조 방법을 제공합니다.
Set
- 순서가 없고 중복안됨
- HashSet, TreeSet
SetTest
package collectiontest;
import java.util.*;
public class SetTest {
public static void main(String[] args) {
HashSet list=new HashSet();
list.add("lee");//0
list.clear();//모두 제거
list.add("cho");//1
list.add("kim");//2
list.add("chung");//3
list.add("min");//4
list.add("chung");//3과 동일
System.out.println("set 사이즈:"+list.size());//size()
System.out.println(list.contains("chung"));
list.remove("kim");//2제거
System.out.println("kim 제거후 set 사이즈:"+list.size());
System.out.println("Iterator객체 이용해서 set출력");
print(list);
System.out.println("배열을 이용해서 set출력");
print(list.toArray());
}
public static void print(Set set){
Iterator iter=set.iterator();
while(iter.hasNext()){
String str=(String)iter.next();
System.out.println(str);
}
}//
public static void print(Object [] obj){
int count=obj.length;
for(int i=0;i<count;i++){
System.out.println(obj[i]);
}
}//
}
List
순서가 있고 중복이 가능합니다.
ArrayList, LinkedList, Vector
ListTest1
package collectiontest;
import java.util.*;
public class ListTest1 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("lee");//0
list.clear();//모두 제거
list.add("cho");//1
list.add("kim");//2
list.add("chung");//3
list.add("min");//4
list.add("chung");//3과 동일
System.out.println("ArrayList 사이즈:"+list.size());//size()
System.out.println(list.contains("chung"));
list.remove("kim");//2제거
list.remove(3);//cung제거
System.out.println("ArrayList 사이즈:"+list.size());
System.out.println("min이 있는 위치값:"+list.indexOf("min"));
System.out.println("Iterator를 이용해서 출력");
print(list);
System.out.println("배열를 이용해서 출력");
print(list.toArray());
//ArrayList 에서 0에서 1까지의 데이타 추출
List sublist=list.subList(0,2);//0~2-1까지
System.out.println("추출된 데이타만 출력");
print(sublist);
System.out.println("for문을 이용해서 출력");
printGet(list);
}
public static void print(List list){
Iterator iter=list.iterator();
while(iter.hasNext()){
String str=(String)iter.next();
System.out.println(str);
}
}//
public static void print(Object [] obj){
int count=obj.length;
for(int i=0;i<count;i++){
System.out.println(obj[i]);
}
}//
public static void printGet(List set){
int count=set.size();
for(int i=0;i<count;i++){
System.out.println(set.get(i));
//String str=(String)set.get(i)
}
}//
}
Vector의 정의 및 요소 검색, 크기 조절
java.lang.Object
|
+--java.util.AbstractCollection
|
+--java.util.AbstractList
|
+--java.util.Vector
모든 구현 인터페이스
Cloneable
Collection
List
RandomAccess
Serializable
직계의 기존의 서브 클래스
Stack
SearchDelete.java
package collectiontest;
import java.util.*;
public class SearchDelete{
public static void main(String args[]){
String name[]={"기획자","설계자","개발자"};
Vector v = new Vector();
//Vector에 배열 요소 저장
for(int i =0;i<name.length; i++){
v.addElement(name[i]);
}
//"개발자"가 있는지 검사
if(v.contains("개발자")){
int i = v.indexOf("개발자");
System.out.println("해당 객체의 인덱스 " + (i+1) + "번째에 있습니다.");
}
else{
System.out.println("해당 객체가 없습니다.");
}
//첫 번째 요소 삭제
v.removeElementAt(0);
System.out.println("===== 지우고 난 후에는 === ");
String s="";
for(int j=0;j<v.size();j++){
s = (String)v.elementAt(j);
System.out.println("Vector " + j + "번째 요소는 " + s);
}
System.out.println("\\n초기상태 크기........................");
System.out.println("엘러먼트의 수는 " + v.size()); //실제 저장된 객체의 수
System.out.println("벡터의 크기는 " + v.capacity()); //객체를 저장할 수 있는 초기 사이즈
System.out.println("\\nv.trimToSize()후.....................");
v.trimToSize(); //값이 할당되지 않았으면 메모리 삭제
System.out.println("엘러먼트의 수는 " + v.size());
System.out.println("벡터의 크기는 " + v.capacity());
System.out.println("\\n디자이너 요소 추가후..................");
v.addElement("디자이너");
System.out.println("엘러먼트의 수는 " + v.size());
System.out.println("벡터의 크기는 " + v.capacity());
System.out.println("\\nCoder 요소 추가후..................");
v.addElement("Coder");
System.out.println("엘러먼트의 수는 " + v.size());
System.out.println("벡터의 크기는 " + v.capacity());
System.out.println("\\nPM 요소 추가후..................");
v.addElement("PM");
System.out.println("엘러먼트의 수는 " + v.size());
System.out.println("벡터의 크기는 " + v.capacity());
}
}
Vector의 이용 예
Sungjuk.java
import java.util.Vector;
class Sungjuk{
//멤버 변수
String name="";
int kuk = 0;
int eng = 0;
int tot = 0;
int avg = 0;
//생성자
public Sungjuk(){}
public Sungjuk(String name,int kuk,int eng){
this.name = name;
this.kuk = kuk;
this.eng = eng;
this.tot = kuk+eng;
this.avg = (kuk+eng) / 2;
}
}
VectorTest2.java
public class VectorTest2 {
public static void main(String args[]){
int i=0;
//sungjuk 객체 생성
Sungjuk s = null;
Sungjuk s1 = new Sungjuk("기획자",100, 80);
Sungjuk s2 = new Sungjuk("설계자",80, 90);
Sungjuk s3 = new Sungjuk("개발자",90, 80);
//Vector에 요소 저장
Vector v = new Vector();
/*
public void addElement(Object obj)
↓
Object obj = s1;
↓
Vector에 (Object)s1 타입으로 저장됩니다.
Object <-- 외부에서 요소 추출시 Object가 리턴
┌-------┐
│Sungjuk│
│ s1 │
└-------┘
Client ---> Object Interface <---> Sungjuk 객체
*/
v.addElement(s1);
v.addElement(s2);
v.addElement(s3);
//vector에 저장된 sungjuk객체 추출하여 출력
for(i=0; i<v.size(); i++){
s = (Sungjuk)v.get(i);
System.out.print(s.name + "\\t");
System.out.print(s.kuk + "\\t");
System.out.print(s.eng + "\\t");
System.out.print(s.tot + "\\t");
System.out.print(s.avg + "\\t\\n");
}
}
}
java.util.ArrayList
Vector와 같은 목적을 가지고 있으며 기능이 비슷합니다.
Vector와의 차이점은 네트워크를 통한 객체 공유시 동기화 처리가 되어 있지 않습니다.
속도는 Vector보다 빠른 속도를 가지고 있습니다. 굳이 객체를 스레드를 이용해 공유할 경우가 아니면 ArrayList 사용을 권장합니다.
java.lang.Object
|
+--java.util.AbstractCollection
|
+--java.util.AbstractList
|
+--java.util.ArrayList
모든 구현 인터페이스
Cloneable
Collection
List
RandomAccess
Serializable
ArrayListTest.java
import java.util.ArrayList;
class Jumsu{
//멤버 변수
String name="";
int kuk = 0;
int eng = 0;
int tot = 0;
int avg = 0;
//생성자
public Jumsu(){}
public Jumsu(String name,int kuk,int eng){
this.name = name;
this.kuk = kuk;
this.eng = eng;
this.tot = kuk+eng;
this.avg = (kuk+eng) / 2;
}
}
ArrayListTest.java
public class ArrayListTest {
public static void main(String args[]){
int i=0;
//sungjuk 객체 생성
Jumsu s = null;
Jumsu s1 = new Jumsu("왕눈이",100, 80);
Jumsu s2 = new Jumsu("아로미",80, 90);
Jumsu s3 = new Jumsu("투투",90, 80);
//Vector에 요소 저장
ArrayList v = new ArrayList();
/*
public void addElement(Object obj)
↓
Object obj = s1;
↓
ArrayList에 (Object)s1 타입으로 저장됩니다.
Object <-- 외부에서 요소 추출시 Object가 리턴
┌-------┐
│Sungjuk│
│ s1 │
└-------┘
Client ---> Object Interface <---> Sungjuk 객체
*/
v.add(s1);
v.add(s2);
v.add(s3);
//ArrayList에 저장된 sungjuk객체 추출하여 출력
for(i=0; i<v.size(); i++){
//Client ---> Object Interface <---> Sungjuk 객체
//Client ---> Sungjuk Interface <---> Sungjuk 객체
s = (Jumsu)v.get(i);
System.out.print(s.name + "\\t");
System.out.print(s.kuk + "\\t");
System.out.print(s.eng + "\\t");
System.out.print(s.tot + "\\t");
System.out.print(s.avg + "\\t\\n");
}
}
}
Map
Key, value 한쌍
HashMap, Hashtable
put 메서드로 입력합니다.
중복된 키 값을 허용하지 않습니다. 만약 사용하게되면 기존의 값이 삭제됩니다.
검색 결과가 없으면 null을 리턴합니다.
MapTest
import java.util.*;
public class MapTest {
public static void main(String[] args) {
HashMap list=new HashMap();
list.put("0","lee");//0
list.clear();//모두 제거
list.put("1","cho");//1
list.put("2","kim");//2
list.put("3","chung");//3
list.put("4","min");//4
list.put("3","jung");//3과 동일 에러
System.out.println(list.size());//size()
System.out.println(list.containsKey("3"));
list.remove("2");//2제거 key를 이용
System.out.println(list.size());
print(list);//Set 만들기
}
public static void print(Map sets){
Set set=sets.keySet();//key값을 Set으로
Iterator iter=set.iterator();
while(iter.hasNext()){
String key=(String)iter.next();
System.out.println(key+" "+sets.get(key));//value
}
}//
}
java.lang.Object
java.lang.Object
|
+--java.util.Dictionary
|
+--java.util.Hashtable
모든 구현 인터페이스
Cloneable
Map
Serializable
직계의 기존의 서브 클래스
Properties
UIDefaults
TestHashTable.java
import java.util.Hashtable;
public class TestHashTable {
public static void main(String[] args) {
Hashtable ht = new Hashtable();
ht.put("AREA01", "대한민국");
ht.put("AREA02", "러시아");
ht.put("AREA03", "중국");
ht.put("AREA04", "일본");
String area = (String)ht.get("AREA01");
//String area = (String)ht.get("AREA05");
if ( area != null){
System.out.println(area);
}else{
System.out.println("검색 지역이 없습니다.");
}
}
}
Properties
속성값 부여를 목적으로 합니다.
java.lang.Object
|
+--java.util.Dictionary
|
+--java.util.Hashtable
|
+--java.util.Properties
특정 객체 생성시 생성자에 초기값으로 속성값을 주는 역활을 합니다.
java.util.Properties p = new java.util.Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL, "t3://192.168.0.1:7001");
ctx=new InitialContext(p);// 부분으로 변경할 것
ProTest.java
//import java.util.Properties;
public class ProTest {
public static void main(String[] args) {
//Properties p = new Properties();
java.util.Properties p = new java.util.Properties();
p.put("step1", "JAVA + SCJP");
p.put("step2", "JSP + Oracle + SCWCD");
p.put("step3", "EJB + SCBCD");
p.put("step4", "OJT + MVC2, Framework + 개발");
System.out.println("STEP1:" + p.getProperty("step1"));
System.out.println("STEP2:" + p.getProperty("step2"));
System.out.println("STEP3:" + p.getProperty("step3"));
System.out.println("STEP4:" + p.getProperty("step4"));
}
}
Last updated