[자바 공부 4일차] 컬렉션 프레임워크 ( Generic, Set, List, Map)
자동 임포트 하는 법 컨트롤+스페이스
- Generic
Generic을 통해 get,set 클래스의 자료형을 지정할 수 있다.
public class Box<E> {
private E obj;
public void setObj(E obj) {
this.obj = obj;
}
public E getObj()
{
return obj;
}
}
<E> 안에 자료형을 넣어 원하는 자료형의 형태를 만든다.
public class BoxExam {
public static void main(String[] args)
{
Box<String> box = new Box();
box.setObj("hello");
String str = box.getObj();
System.out.println(str);
Box<Integer> box2 = new Box();
box2.setObj(5);
int n = box2.getObj();
System.out.println(n);
}
}
- Set : 중복이 없고 순서가 없는 배열
Set을 통해 데이터를 설정하고 추가할 수 있다.
package JavaUtil.exam;
import java.util.HashSet;
import java.util.Set;
import java.util.Iterator;
public class setExam {
public static void main(String[] args) {
Set<String> set1 = new HashSet<>();
boolean flag1 = set1.add("kang");
boolean flag2 = set1.add("kim");
boolean flag3 = set1.add("kang"); //중복값이기 떄문에 저장되지 않음
System.out.println(set1.size());
System.out.println(flag1);
System.out.println(flag2);
System.out.println(flag3); //중복값이기 떄문에 false 출력
}
}
해당 함수를 실행하면, set1의 size=2 가 출력되며, flag3만 false가 출력될 것이다. 중복 데이터는 저장되지 않기 때문에 처음 저장한 kang, kim 만 저장되는 것이다.
그럼 이제 저장된 데이터를 출력해보자.
저장된 데이터를 출력할 땐 iterator를 이용한다.
Iterator<String> iter = set1.iterator(); //자료를 하나씩 꺼냄
while(iter.hasNext())
{
System.out.println(iter.next());
}
while 문과 .hasNext()라는 메소드를 통해 모든 데이터를 출력할 수 있다.
hasNext()란 다음 데이터가 있는지 true, false 값을 리턴해주는 메소드이다.
.next() 메소드를 이용해 다음 데이터를 출력할 수 있다.
- List (벡터형 배열, 데이터 중복O, 순서 O)
List를 사용하면 중복값을 배열에 저장할 수 있다.
List는 벡터형이기 때문에 사이즈가 정해지지 않고 더하는 만큼 늘릴 수 있다. 또한 데이터 값에 순서를 갖는다.
List는 list.get(index) 라는 메소드를 통해 순서에 해당하는 데이터를 출력할 수 있다.
package JavaUtil.exam;
import java.util.ArrayList;
import java.util.List;
public class ListExam {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list = new ArrayList<>();
list.add("kim");
list.add("kang");
list.add("kim");
System.out.println(list.size());
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
}
- Map <Key, Value>
.put(Key, Value) 메소드를 통해 key 값과 value 값을 추가한다.
.get(Key) 메소드를 통해 Value 값을 읽는다.
Key 값을 중복으로 설정할 경우, 나중에 설정한 값이 최종 value 값이 된다.
package JavaUtil.exam;
import java.util.HashMap;
import java.util.Map;
public class MapExam {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String, String> map = new HashMap<String, String>();
map.put("001", "Kim");
map.put("002", "Lee");
map.put("003", "Choi");
map.put("001", "kang");
System.out.println(map.size());
System.out.println(map.get("001"));
}
}
다음의 경우, Kang이 kim을 대체하여 Key 001의 값에 value로 들어갔을 것이다.
그러나 데이터의 양이 많아진다면 Key 값을 일일이 기억하기 힘들 것이다.
이럴 땐 앞서 배운 Set과 Iterator 클래스를 이용하면 된다.
Set<String> keys = map.keySet();
Iterator<String> iter = keys.iterator();
다음과 같은 방법을 통해 Iterator에 key 값을 저장한다.
while(iter.hasNext())
{
String skey = iter.next();
String value = map.get(skey);
System.out.println(value);
}
while 문을 통해 key값에 따른 value 값을 출력할 수 있다.