Map集合(笔记21)

Map集合

一、Map集合

Map集合提供的是key到value的映射,Map中不能包含相同的key值,每个key只能影射一个相同的value.key值还决定了存储对象在映射中的存储位置.Map集合包括Map接口以及Map接口所实现的类.
声明 
public interface Map<K,V> 
map 集合无序 , 不可以有重复的key,可能重复的value
=>HashMap     public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable
=>HashTable  public class Hashtable<K,V>extends Dictionary<K,V>implements Map<K,V>, Cloneable, Serializable
->TreeMap  底导是二叉排序树
HashMap 和  HashTable的区别
1)HashMap 和 HashTable 都是Map的子类(因为它们都实现了 Map 接口),但是 HashTable 还继承了 Dictionary类
2)HashMap 可以有null值和null键 , HashTable 不可以
3)HashTable 比较古老 从jdk1.0 就开始有了 ,线程安全,但Map 线程不安全

Map集合的操作
V put(K key, V value)  
void putAll(Map<? extends K,? extends V> m)  
V remove(Object key)
int size()    
V get(Object key)        
boolean containsKey(Object key) 
boolean containsValue(Object value)
Set<K> keySet() 
boolean equals(Object o)  
Collection<V> values()    
boolean isEmpty() 
void clear()  
Set<Map.Entry<K,V> entrySet()  
V put(K key, V value) //往map集合里放数据 void putAll(Map<? extends K,? extends
V> m) V remove(Object key) //根据key ,移除一个元素 int size() //查看集合中一共有多少组元素 V
get(Object key) //根据key 取 value 
boolean containsKey(Object key)判断是不是包含一个key 
boolean containsValue(Object value) //判断是不是包含一个value
Set<K> keySet() //取所有的key, 以Set方式返回 boolean equals(Object o)
Collection<V> values() //取所有的value 以Collection 形式返回 
boolean isEmpty() //判断是不是空 void clear() //清除
Set<Map.Entry<K,V> entrySet()

 
//例一,最简单的例子
static void demo(){
Map map=new HashMap();
map.put("01", "一号战犯"); 
map.put("02", "二号战犯"); 
map.put("03", "三战犯"); 
map.put("04", "四号战犯"); 
System.out.println(map.size()); //4
System.out.println(map);  //{04=四号战犯, 01=一号战犯, 02=二号战犯, 03=三战犯} 无序
}

//例二 
static void demo2() {
Map<String, String> map = new HashMap<String, String>();
map.put("美食一", "鸡肉");
map.put("美食二", "狗肉");
map.put("美食三", "护心肉");
map.put("美食四", "兔肉");
map.put("美食四", "这是啥肉"); // 如果key相同,则会覆盖
map.put(null, "这是null对应的值");
map.put("美食五", "榴莲");
map.put("美食六", null);
System.out.println(map);
System.out.println(map.size());
System.out.println(map.get("美食五")); // 榴莲
System.out.println(map.containsKey("美食四"));// true
System.out.println(map.containsValue("狗肉"));// true
map.remove("美食四");
System.out.println(map);
// map.clear();
// System.out.println(map.isEmpty()); //true
// 取所有的key
Set<String> keyset = map.keySet();
Iterator<String> it = keyset.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// 取所有的value
Collection<String> c = map.values();
Iterator<String> it2 = c.iterator();
while (it2.hasNext()) {
System.out.println(it2.next());
}
//map集合put方法的返回值
String result=map.put("美食五", "香蕉");  //用香蕉,换出榴莲
System.out.println(result); //榴莲
}

二、Map集合的遍历

static void demo3(){
Map<String, String> map = new HashMap<String, String>();
map.put("美食一", "鸡肉");
map.put("美食二", "狗肉");
map.put("美食三", "护心肉");
map.put("美食四", "兔肉");
map.put("美食四", "这是啥肉"); // 如果key相同,则会覆盖
map.put(null, "这是null对应的值");
map.put("美食五", "榴莲");
map.put("美食六", null);

//方式一,先取所有的key,然后循环,挨个取key对应的value
Set <String >keyset= map.keySet();
Iterator<String> it=keyset.iterator();
while(it.hasNext()){
String key=it.next();
String value=map.get(key);
System.out.println(key+":"+value);
}

//方式二 , 使用Map.Entry 类型
Set<Map.Entry<String, String>> entrySet= map.entrySet();
Iterator<Map.Entry<String, String>> it2= entrySet.iterator();
while(it2.hasNext()){
Map.Entry<String, String> item =it2.next();
System.out.println(item.getKey()+":::"+item.getValue());
}
}

三、Map集合中存放自定义对象

需求,定义一个类 犯人 (名字,身份证号,罪行),将几个类对象存到Map集合中
遍历 ,调用这个类提供的方法
public class Test {
public static void main(String[] args) {
// List<int> list=new ArrayList<int>(); 不可以用基本数据类型来指定泛型
// List<Integer> list=new ArrayList<Integer>(); 可以
Japan p1=new Japan("001","安倍晋三","不当人当狗");
Japan p2=new Japan("002","奥巴马","养狗");
Japan p3=new Japan("003","陈水扁","当哈巴狗");
Map<String,Japan> map=new HashMap<String,Japan>();
map.put(p1.idCard, p1);
map.put(p2.idCard, p1);
map.put(p3.idCard, p1);
//Map.Entry<K, V>
Set <Map.Entry<String, Japan>>entrySet= map.entrySet(); 
Iterator<Map.Entry<String, Japan>> it=entrySet.iterator();
while(it.hasNext()){
Map.Entry<String, Japan> item=it.next();
String key=item.getKey();
Japan japan =item.getValue();
System.out.println("编号:"+key);
System.out.println("拖出去毙了");
japan.kill();
//System.out.println(item.getKey()+":"+item.getValue());
}
}
}

class Japan{
public Japan(String idCard, String name, String crime) {
this.idCard = idCard;
this.name = name;
this.crime = crime;
}
public String idCard;
public String name;
public String crime;
void kill(){
System.out.println("我是犯人:"+this.name+ "我的罪行是:"+this.crime);
System.out.println("啊....im game over... ");
}
}


猜你喜欢

转载自blog.csdn.net/weixin_41205479/article/details/80222657