Map接口和Collection接口有什么不同:
Map集合:双列集合,键是唯一的,数据结构只针对键有效。
Collection:单列集合,Set体系是具有唯一性的。数据类型针对集合中的元素有效。
Map集合中的方法;
添加:
V put(K key, V value)
如果键是第一次添加,返回null
如果键不是第一次添加,就用新值替换之间的旧值,并且返回之前的旧值
"zhangsan",30
//"zhangsan",30
"lisi",30
删除:
void clear();
V reomove(Object key); 根据键,移除该键值对。返回值
判断:
boolean containsKey(Object key); 判断集合中是否包含给定的键
boolean containsValue(Object value); 判断集合中是否包含给定的值
boolean isEmpty(); 判断集合是否为空
获取:
Set< Map.Entry<K,V> > entrySet(); 返回 键值对对象 的集合。
V get(K key); 根据键获取值
Set<T> keySet(); 获取双列集合中,所有键的集合
Collection<V> values(); 获取双列集合中,所有值的集合
长度:
int size(); 返回的是集合中 键值对 的个数。
Map集合的遍历:
1、根据键找值:
思路:
1、通过keySet()方法获取到所有的键。
2、遍历第一步获取到的键的集合,拿到每一个键。
3、获取到键后,调用get()方法,找到其对应的值。
HashMap<String,Integer> hm = new HashMap<>();
hm.put("zhangsan",28);
hm.put("lisi",30);
//拿到所有的键
Set<String> set = hm.keySet();
//遍历第一步获取到的键的集合,拿到每一个键
for(String s : set){
System.out.println( "键" + s + "对应的值是:" + hm.get(s));
}
2、获取到键值对的集合,然后从中获取到键和值
1、通过entrySet()方法拿到所有的 键值对对象 的集合。
2、遍历第一步获取到的键值对对象的集合,拿到每一对键值对对象。
3、获取到键值对对象后,调用getKey(),getValue()方法,找到其对应的键和值。
HashMap<String,Integer> hm = new HashMap<>();
hm.put("zhangsan",28);
hm.put("lisi",30);
Set< Map.Entry<String,Integer> > set = hm.entrySet();
// Map.Entry<String,Integer> 可以看做是以前咱们将的动物类案例的Animal接口
//Entry<String,Integer> 可以看做是实现了Animal接口的子类(Dog)
for( Map.Entry<String,Integer> en : set){ //en就是每一个键值对对象
System.out.println(en.getKey() + "****" + en.getValue());
}
Map.Entry原码解析:
1、Entry<K,V>其实是 Map.Entry<K,V>的一个子类。
2、Entry<K,V>其实是一个键值对对象,Map是一个接口,Entry是Map接口中的接口。(内部接口)
LinkedHashMap:
底层数据结构是链表,可以保证元素的存取顺序是一致的。
中午:
1、HashMap存: 键:Student,值:String
2、TreeMap存: 键:Student,值:String (按照年龄排序)
3、统计每个字符出现的次数。(HashMap做)
选做:
双元课堂有很多基础班:
第88期基础班定义成一个双列集合,键是学生对象,值是学生的归属地
第99期基础班定义成一个双列集合,键是学生对象,值是学生的归属地
无论88期还是99期都是班级对象,所以为了便于统一管理,把这些班级对象添加到双元课堂集合中。
HashMap<Student,String> 88期 = new HashMap<>();
HashMap<Student,String> 99期 = new HashMap<>();
HashMap< HashMap<Student,String> ,String> hm = new HashMap<>();
HashMap和Hashtable的区别:
区别:
Hashtable:JDK1.0以后的,线程安全,效率低。不能存null值和null键。
HashMap: JDK1.2以后的,线程不安全的,效率高。可以存null值和null键。
(加一句:)这两个类也有共同点,他们都是双列集合,底层都是哈希算法。
Collections集合工具类中的方法;
sort(List list); //对给定集合进行排序
binarySearch(List list, Oject obj); //二分查找
max(Collectin coll); //求最大值
reverse(List list); //反转
shuffle(List list); //随机置换。(相当于“洗牌”)
模拟斗地主发牌:
泛型:
固定下边界(向上限定)
? super E E类或者E的父类
固定上边界(向下限定)
? extends E E类或者E的子类 |
|