双列集合
java针对键值映射关系(一个键只能对应一个值)的数据,提供了双列集合(Map集合)来存储
所有Map集合的数据结构只跟键有关,与值无关。
键相同,值就会覆盖
Map接口常用实现类有HashMap、Hashtable、TreeMap、LinkedHashMap、TreeMap
1.HashMap
键的数据结构是哈希表,键唯一(靠重写equals()方法保证 合理重写hashCode方法可以减少元素碰撞)允许存储null键和null值 线程不安全 效率高
HashMap<String,String> map = new HashMap<>();
//当我们第一次存储键值对数据时 返回null 再一次存储一个键相同的数据时,会覆盖掉旧值,返回值是这个键所对应的旧值
String s1 = map.put("a","1");//null
String s2 = map.put("a","2");//1
map.put("c","3");
map.put("d","4");
//存储键是String值是Student类型的数据
HashMap<String,Student> hm = new HashMap<>();
hm.put("s001",new Student("zhangsan",23));
hm.put("s002",new Student("lisi",24));
hm.put("s003",new Student("wangwu",33));
System.out.println(hm);
//存键是Student 值是String的元素 默认比较键比较的是地址值 需要键Student类重写equals和hashcode方法
HashMap<Student,String> hm = new HashMap<>();
hm.put(new Student("zhangsan",23),"s001");//两个zhangsan都能存上去
hm.put(new Student("zhangsan",23),"s002");//两个zhangsan都能存上去
hm.put(new Student("lisi",23),"s003");
常用方法
HashMap<String,Student> hm = new HashMap<>();
hm.put("s001",new Student("zhangsan",23));
hm.put("s002",new Student("lisi",24));
hm.put("s003",new Student("wangwu",33));
//全部清空
hm.clear();
//删除某一键值对
String s = hm.remove(key);根据键删除键值对,返回键所对应的值
//判断是否为空
hm.isEmpty();
//获取长度
hm.size();
//判断
//判断是否有该键、值
hm.containsKey(key);
hm.containsValue(value);
//遍历集合
1.根据 键找值 方法
String value = hm.get(key);
//获取所有键的集合
Set<Stirng> KeySet = hm.keySet();
//遍历键集 键找值
2.获取出 键值对对象 的集合
Set<Map.Entry<String,String>> entries = hm.entrySet();
遍历键值对集合 通过键值对对象里的方法取出键和值
//获取所有值的集合
Collection<String> values = hm.values();
Hashtable和HashMap区别
Hashtable不允许null键和null值 线程安全效率低
2.LinkedHashMap
键唯一且有序 链表保证了键有序 哈希表保证键唯一
LinkedHashMap<Integer,String> lhm = new LinkedHashMap<>();
lhm.put();
3.TreeMap
键的数据结构 是二叉树 ,键唯一且可以对键排序
使用空参构造是自然排序 有参构造是比较器排序(参是比较器)
TreeMap 键不允许插入null