当前位置: 代码迷 >> 综合 >> JAVA基础学习总结,day15(Map集合)
  详细解决方案

JAVA基础学习总结,day15(Map集合)

热度:54   发布时间:2024-01-26 14:22:43.0

Map 集合(双列集合接口)

特点:
1.以键值对的形式存储元素
2.通过键可以找到值
3.键是唯一的,值是可以重复的
4.Map集合的<k,v>泛型,是用来限制Map集合中的键的类型和值的类型常用子类:
HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致
由于要保证 键 的唯一、不重复,需要重写 键的hashCode()方法、equals()方法。
LinkedhashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。
通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证
键 的唯一,不重复,需要重写键的hashCode()方法、equals()方法

Map集合常用的方法(必须掌握
public V put(K key, V value) : 往集合中添加键值对,放回之前该键对应的值
public V remove(Object key) : 根据键删除该键对应的键值对,返回被删除元素的 值。
public int size(): 获取键值对的长度
boolean containsKey(Object key) 如果此映射包含对于指定键的映射关系,则返回 true。
boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。
public V get(Object key) 根据指定的键获取对应的值。
public collection values(): 获取Map集合中所有的值,存储到collection集合中
public Set keySet() : 获取Map集合中所有的键,存储到Set集合中。
public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。

Map<K,V>:接口

  • K: 用来限制集合中键的数据类型
  • V: 用来限制集合中值的数据类型
  • Map集合中常用实现类的介绍:
  • HashMap:存储元素的结构是哈希表结构,特点:键唯一,键值对的存取无序
  • LinkedHashMap:存储元素的结构是链表+哈希表结构,特点:键唯一,键值对的存取有序
  • TreeMap:特点:键唯一,对键值对元素进行排序

Map集合的第一种遍历方式
通过 键找值 的方式遍历双列集合
思路:
1.获取该集合的所有建
2.遍历所有的键的集合,得到每一个键
3.根据键找对应的值

HashMap<Integer,String> map=new HashMap<>();     
//往map集合中添加元素 
map.put(1,"张三");     
map.put(2,"李四");     
map.put(3,"王五");     
map.put(4,"钱六");     
map.put(5,"田七");     
//1.获取该集合的所有键 
Set<Integer> keySet=map.keySet();     
//2.遍历所有的键的集合,得到每一个键 
for(Integer key:keySet){     
//3.根据键找对应的值 
String value=map.get(key);          
Sytem.out.println(key+":"+value);     
}

Map集合的第二种遍历方式:
通过 键值对对象 的方式遍历双列集合
思路:
1.获取该集合的所有 键值对 对象
2.遍历该键值对对象的Set集合,拿到每一个键值对对象
3.调用键值对对象的getKey()和getValue()方法获取键和值
Map.Entry接口中的方法:
public K getKey(); 获取Entry对象中的键
public V getValue; 获取Entry对象中的值

// 创建一个Map集合,键的类型是:Integer,值的类型是String
Map<Integer, String> map = new HashMap<>();
// 往map集合中添加键值对
map.put(1, "张三");// 键值对是由2部分组成,一部分是键,一部分是值,键值是相互对立
map.put(2, "李四");
map.put(3, "王五");
map.put(4, "赵六");
// public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的 键值对对象 的集合(Set集合)
// entrySet()方法是用来获取Map集合中所有的键值对对象,一个元素,键和值在一起了
// Entry将键值对的对应关系封装成了对象。即键值对对象
// Set<Map.Entry<Integer, String>> set = map.entrySet();// 第二种方法遍历:根据键值对对象的方式遍历Map集合
// 2.1 获取该集合中所有的键值对对象
Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
// 2.2 遍历所有的键值对对象(Entry)for (Map.Entry<Integer, String> entry : entrySet) { 
//2.3 使用键值对象对象获取键和值 
//2.4 获取键 
Integer key  = entry.getKey();    
// 2.4 获取值 
String value = entry.getValue();     System.out.println(key+"..."+value);}tem.sout.println(key+":"+value);      
}

HashMap集合保证键唯一的原理:依赖键的hashCode()和equals()方法

  1. 当HashMap集合要存储键值对的时候,会调用键的hashCode方法计算该键对应的哈希值
  2. 判断该哈希值对应的位置是是否有相同哈希值的键
  3. 如果该位置上没有相同哈希值的键,那么就直接存储该键值对
  4. 如果该位置上有相同哈希值的键,那么就产生了哈希冲突
  5. 如果产生了哈希冲突就会调用该键的equals方法,判断该键与该位置上的所有的键是否相等,

如果该键与其中任何一个键相等,那么就覆盖之前的键值对
如果该键与其中任意一个键都不相等,那么就存储键值对

HashMap存储自定义类型键值:保证键唯一,必须重写键的hashCode()和equals()方法
LinkedHashMap存储自定义类型键值:保证键唯一,必须重写键的hashCode()和equals()方法 LinkedHashMap:是由哈希表保证键唯一,由链表保证元素存取有序
HashMap:是由哈希表保证键唯一
List,Set,Map集合都有一个静态方法 of(),适合添加批量少量元素,并且创建出来的集合是不可以变的
jdk 9 对集合添加元素的优化:
Java 9,添加了几种集合工厂方法,更方便创建少量元素的集合、map实例。
新的List、Set、Map的静态工厂方法可以更方便地创建集合的不可变实例。

作用:适合添加少量元素
注意:

  1. of()方法只是Map,List,Set这三个接口的静态方法,其父类接口和子类实现并没有这类方法,比如 HashSet,ArrayList等待;
  2. 返回的集合是不可变的;
  相关解决方案