package collection;
import java.util.HashMap;
import org.junit.Test;
/**
*
* @function: MAP集合练习
*1、指定类型。2、未指定类型
*
* @author:陆立均
* @date:2018年12月16日
*
*/
public class Map {
/**
* 未指定键、值类型
*
* 键值为任意类型 ,都为Object类型
*/
@Test
public void hmap(){
HashMap map=new HashMap();
map.put(1, 100);
map.put("name","王五");
//遍历获取键
for(Object o : map.keySet()){
//根据键取值
Object obj=map.get(o);
System.out.println("o:"+obj);
}
}
/**
* 指定键值类型
*
* 键为Integer类型,值为字符串类型
*
*/
@Test
public void opperMap_01() {
// 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。只有调用put的方法的时候才真正的创建数组
HashMap<Integer, String> hMap = new HashMap<Integer, String>(); //不创建数组的,所以结论是 0
//Map<String, String> m0 = new HashMap<>(0);
hMap.put(1, "100");
hMap.put(2, "002");
hMap.put(3, "006");
hMap.put(3, "006"); //重复时,被覆盖
// 遍历集合方式一
for (Integer id : hMap.keySet()) {
String value = hMap.get(id);
System.out.print("id:"+id);
System.out.println(",值:"+value);
}
// // 遍历集合方式二:通过Map.values()遍历所有的value,但不能遍历key")
for (String v : hMap.values()) {
//System.out.println("value= " + v);
}
// 第三种:推荐,尤其是容量大时
System.out.println("第三种:通过Map.entrySet遍历key和value");
for (HashMap.Entry<Integer, String> entry : hMap.entrySet()) {
// Map.entry<Integer,String> 映射项(键-值对) 有几个方法:用上面的名字entry
// entry.getKey() ;entry.getValue(); entry.setValue();
// map.entrySet() 返回此映射中包含的映射关系的 Set视图。
// System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
}
/**
* 指定键、值类型。
*
* 键是字符串类型,值为Student对象
*/
@Test
public void hashMap(){
HashMap<String,Student> hs=new HashMap<String,Student>();
hs.put("01", new Student("1","张三"));
hs.put("02",new Student("2","lisi"));
//
for(String id:hs.keySet()){
Student student=hs.get(id);
System.out.print("学生:"+student.id);
System.out.println("名字:"+student.name);
}
}
}