Map
: 가장 늦게 들어온 컬렉션프레임워크. 컬렉션을 상속받고 있지 않다.=독립적
하지만 자료구조에 있으므로 그렇게 불리는 것이다.
일반적으로 Key에는 스트링을 쓴다.
package com.bit.day10;
import java.util.HashMap;
import java.util.Map;
public class Ex13 {
public static void main(String[] args) {
//Map interface -- list의 순서를 가지면서 set처럼 순서가 없다. (set 구조와 list 구조를 동시에 가진다)
//키와 value를 통해 이루어짐 -- idx처럼 키를 호출하면 value를 얻어낼 수 있음.
//key - set type
//value - list type
//따라서 value값 중복 가능 -- 키에 의해서 서로 구별이 되니까(인덱스처럼)
//반면 key는 중복될 수 없음 -- 키가 중복된다는 것은 value를 바꾼다는 것이다.(덮어쓰기)
//제네릭을 쓰지 않으면 Object이므로 모든 것을 받을 수 있음
Map<String,String> map=new HashMap<String,String>();
map.put("key1", "val1");
map.put("key2", "val2");
map.put("key3", "val3");
map.put("key4", "val4");
map.put("key4", null); //null 출력 - 뺄 때 remove를 사용할 수도, null을 대입할 수도 있다.
map.put(null, "val6"); //출력x
System.out.println(map.get("key1"));
System.out.println(map.get("key2"));
System.out.println(map.get("key3"));
System.out.println(map.get("key4")); //val4 출력
}
}
값 뽑아내기
package com.bit.day10;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Ex14 {
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<String,Integer>();
map.put("key1",1111);
map.put("key1",2222);
map.put("key1",3333);
map.put("key1",4444);
Set<Entry<String,Integer>> entrys = map.entrySet(); //내부클래스 - 이러한 구조로 들어있다.
Iterator<Entry<String,Integer>> ite=entrys.iterator();
while(ite.hasNext()){
Entry<String,Integer> entry=ite.next();
System.out.println("key : "+ entry.getKey()+",val :" + entry.getValue());
}
}
}
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Ex14 {
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<String,Integer>();
map.put("key1",1111);
map.put("key1",2222);
map.put("key1",3333);
map.put("key1",4444);
Set<String> keys = map.keySet(); //KEY들을 set타입으로 만듦 -- map을통해서 key를 호출하여 value값을 얻을 수 있음.
Iterator<String> ite2 = keys.iterator(); //set을 반복하기 위해
while(ite2.hasNext()){
System.out.println(map.get(ite2.next()));
}
enumeration과 iterator가 작동하는 방식
: 커서가 하나 있어서 hasNext가 있으면 다음값을 계속 가리킨다.
없으면 나가버린다. 한번 밖으로 나가면 다시 들어오지 못한다.
-->다시 반복을 하고 싶으면 새롭게 enumeration or iterator 객체를 뽑아내야한다.
iterator : 벡터의 enumeration 처럼 해야겠다 해서 만든 객체 -- (다음값이 있으면 출력하는)
enumeration - 벡터에서만 활용
iterator = 컬렉션 모두 iterator 객체를 받아낼 수 있다.(벡터포함)
iterator 객체에 데이터를 카피해서 만들어내고있는 것이다. 원본은 그대로이기때문에 iterator나 enumeration은 그냥 받아서 보기위해 특별히 만들어진 객체이다. 여기에 값을 대입해봤자 바뀌지 않음!
루프문
: Set,List,배열 모두 사용가능한 루프문
단, list와 set은 제네릭이 있어야한다. for문의 타입이 제네릭에 의해서 결정되니까.
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Ex15 {
public static void main(String[] args) {
// List<String> arr=new ArrayList<String>();
Set<String> arr=new HashSet<String>();
arr.add("item1");
arr.add("item2");
arr.add("item3");
arr.add("item4");
//개선된 루프문
for(String msg:arr){
System.out.println(msg);
}
}
}
String[] arr={"j","a","v","a","java"};
//개선된 루프문
for(String msg:arr){
System.out.println(msg);
}
//배열도 가능