Code Archive/JAVA

Step9. Set, List, Map, Generic, Iterator, 로또 출력 프로그램

쌍큐 2014. 9. 12. 14:08

**Generic(제네릭)**

제네릭은 C++의 템플릿과 비슷한 역할을 하는 것으로 클래스들이 가지고 있는 속성의 데이터 타입을 보다 유연하게 사용하게 해준다.

단 제네릭에 들어가는 데이터 타입은 레퍼런스 형만 지워한다.



public class Test<T> { //<T> 나중에 클래스 생성시 이 T로 변수 타입 고정

private T data;


public Test(T data) {

super();

this.data = data;

}


public T getData() {

return data;

}


public void setData(T data) {

this.data = data;

}


@Override

public String toString() {

return "Test [data=" + data + "]";

}

}


public class TestGeneric{


public static void main(String[] args) {

// TODO Auto-generated method stub

Test<Integer> t = new Test<Integer>(20); //데이터 타입 정하는 부분

System.out.println(t.toString());

}


}

** Set **

데이터 입력시 중복된 내용은 입력불가 내부에서 자동으로 자료 정렬(순서를 보장하지 않음)


Set set=new HashSet();

set.add("A");

set.add("B");

set.add("A");

// set 은 중복 인정 x

System.out.println(set.size());// A가 중복되므로 2

//HashSet 이 상속받은 AbstractCollection class에서

// toString() 을 오버라이딩하여 개별 요소들이 출력되도록

// 했으므로 set 안의 요소들이 출력된다.

System.out.println(set);

set.add("C");

System.out.println(set.size());

set.remove("C");// 삭제

System.out.println(set);

//포함되어 있는 지 true / false 반환

System.out.println(set.contains("C"));

set.clear();// 모두 비운다.

System.out.println(set);


**List**

index를 이용하여 중복된 내용 입력 가능, 단 데이터 입력 순으로 저장(순서보장)


ArrayList list=new ArrayList();

list.add("A");

list.add("B");

list.add("C");

System.out.println(list.size());//3

System.out.println(list);

System.out.println(list.get(0));//0번째 인덱스 리턴 

list.remove(4);

// for 문을 이용하여 list의 모든 요소를 출력

for(int i=0;i<list.size();i++){

System.out.println(list.get(i));
}



**Collection**
Collection interface

Set     List interface가 위 Collection을 상속받고 있다.

Set : 중복허용 x     List: 순서보장

**Iterator(열거자) 인터페이스**
Collection interface 에는 iterator() 라는 추상 메서드가 있다
즉 Set 과 List 계열에  iterator() 는 상속되고 있다.

정의 : Collection(집합) 의 데이터들을 열거하기 위한
           표준을 제공하는 인터페이스
           참고) 표준을 제공 --> 메서드 제공
           hasNext() : 다음 요소가 있는지 true or false
           next() : 다음 요소를 Object type으로 리턴
          

Iterator it=list.iterator();
// 다음 요소가 있는 지 true false
// 요소가 존재할 때까지 수행 - while
while(it.hasNext()){
// 다음 요소를 반환받는다.
System.out.println(it.next());
}



**Map**
key값을 이용하여 데이터 저장, 중복 허용, 단 key는 유일 데이터
순서를 보장하지 않음

HashMap map=new HashMap();
map.put("a", "A");
map.put("b", "B");
System.out.println(map.size());
System.out.println(map);// toString() 오버라이딩
System.out.println(map.get("a"));// key 로 value를 검색
map.put("b", "현아");// 동일한 key를 put 하면
// key 는 중복되지 않고 value 가 업데이트
System.out.println(map);
// key 의 존재 유무를 true/false 로 리턴
boolean flag=map.containsKey("a");
System.out.println(flag);
System.out.println(map.remove("a"));
System.out.println(map);
// 비어 있는지 여부를 true/false로 반환
System.out.println(map.isEmpty());
map.clear(); // 비운다
System.out.println(map.isEmpty());// true




-HashMap 예제


package map;


import java.util.HashMap;

import java.util.Set;


public class TestMap {


public static void main(String[] args) {

// TODO Auto-generated method stub

HashMap<String, Integer> map = new HashMap<String, Integer>();

//입력

map.put("A", 65);

map.put("B", 66);

map.put("C", 67);

map.put("D", 68);

map.put("E", 69);

map.put("F", 70);

//로드

System.out.println(map.get("B"));

Set<String> set = map.keySet();

Object o[] = set.toArray();

for(int i=0;i<o.length;i++){

System.out.println(map.get(o[i].toString()));

}

}



}


 Iterator -
Set, List, Map에 있는 내용을 3가지의 자료구조에 구애 받지 않고
출력하기 위한 인터페이스

package iterator;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class TestIterater {

public void print(Iterator it){

while(it.hasNext())//다음 데이터가 있는지 확인
System.out.println(it.next());//다음 데이터를 출력
System.out.println("출력 완료");
}

/**
* @param args
*/

public static void main(String[] args) {
// TODO Auto-generated method stub
TestIterater ti = new TestIterater();
//List에 내용 저장
ArrayList list = new ArrayList();
list.add("abcd");
list.add("efgh");
list.add("ijkl");

//HashSet에 내용 저장
HashSet set = new HashSet();
set.add("abcd");
set.add("efgh");
set.add("ijkl");

//Map에 내용 저장
HashMap map = new HashMap();
map.put(1, "abcd");
map.put(2, "efgh");
map.put(3, "ijkl");

//ArrayList 출력
ti.print(list.iterator());

//HashSet 출력
ti.print(set.iterator());

//HashMap에 있는 내용 출력
Set key = map.keySet();

Iterator it = key.iterator();

while(it.hasNext())
    System.out.println(map.get(it.next()));
}

}
Iterator()를 통해 일괄적으로 출력이 가능하다.

- Generic -

package generic;
import java.lang.reflect.Array;
import java.util.ArrayList;

public class TestGeneric {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* Generic 적용 되지 않았을 때는 여러 자료를 넣을 수 있으나
* 어떤 자료가 들어가 있는지 판단할수가 없으며
* 각각 자료를 사용하기 위해선 그 자료형에 맞게 캐스팅을 해주어야 한다.
* */
ArrayList list = new ArrayList();
list.add("문자열");
list.add(new TestClass(1,2));
list.add(3254235);

for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); }


String str = (String)list.get(0);
TestClass tc = (TestClass)list.get(1);
int k = (int)list.get(2);

**로또 출력 프로그램**

import java.util.HashSet;

import java.util.Random;



public class Lotto {


public static void main(String[] args) {

// TODO Auto-generated method stub

HashSet<Integer> set = new HashSet<Integer>();

Random r = new Random();

while(set.size() < 6){

set.add(r.nextInt(45)+1);

}

System.out.println(set.toString());

}


}