**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.add("문자열");
list.add(new TestClass(1,2));
list.add(3254235);
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());
}
}
'Code Archive > JAVA' 카테고리의 다른 글
| Step11. Exception(예외처리) (0) | 2014.09.12 |
|---|---|
| Step10. Wrapper class, Nested(inner) class (0) | 2014.09.12 |
| Step8. Polymorphism(다형성) interface 계층구조를 이용하여 구현 (0) | 2014.09.12 |
| Step7. Polymorphism(다형성) 클래스 계층구조를 이용하여 구현 (0) | 2014.09.12 |
| Step6. 배열, Inheritance(상속) (0) | 2014.09.12 |