集合
存储特点
- 以键值对的形式存储数据
- 键(key):无序,无下标,元素不可重复
- 值(value):无序,无下标,元素可以重复
常用实现类
- HashMap
JDK1.2 底层哈希表实现 线程不安全,效率高 - LinkedHashMap
JDK1.2 是HashMap的子类,底层哈希表实现 线程不安全,效率高 - TreeMap
JDK1.2 是SortedMap的子类,底层哈希表实现 线程不安全,效率高 - Hashtable
JDK1.0 底层哈希表实现 线程安全,效率低 - Properties
JDK1.0 是Hashtable的子类,底层哈希表实现 线程安全,效率低
创建
- 建议使用多态
Map<键的泛型,值的泛型> 集合名=new 实现类名<>();
常用方法
K:键
V:值
- V put(K,V):向集合中添加一个键值对
- 如果键已经存在,则进行值的覆盖
- int size():获取集合长度
- boolean containsKey(K):判断集合是否包含指定键
- boolean containsValue(V):判断集合是否包含指定值
- V get(K):根据键获取值
遍历
- 键遍历
- Set<k的泛型> keySet():获取集合所有的键放入Set集合返回
//先获取所有的键
Set<String> set1 = map.keySet();
//遍历键
set1.forEach(k -> System.out.println(k + " " + map.get(k)));
- 值遍历
- Collection<V的泛型> values():获取集合所有的值放入Collection集合返回
//获取所有的值
Collection<String> coll = map.values();
//遍历值
for (String s : coll) {
System.out.println(s);
}
- 键值对遍历
- Set <Map.Entry<K的泛型,v的泛型>> entrySet():将所有的键值对对象放入Set集合返回
- entry对象.getKey():获取entry对象中的键
- entry对象.getValue():获取entry对象中的值
//获取到所有的entry对象
Set<Map.Entry<String, String>> set2 = map.entrySet();
//遍历entry对象
set2.forEach(entry-> System.out.println(entry.getKey()+","+entry.getValue()));
- 自遍历forEach
- 集合名.forEach(BiConsumer 接口实现类对象)
System.out.println("自遍历-->匿名内部类:");
map.forEach(new BiConsumer<String, String>() {
@Override
public void accept(String k, String v) {
System.out.println(k+" , "+v);
}
});
System.out.println("自遍历-->lambda:");
map.forEach((k,v)->System.out.println(k+" , "+v));
使用
- 除去TreeMap之外,如果键为自定义类型,则必须重写hashCide和equals方法才能实现去重
- HashMao可以存放null值,键只能有一个null,值可以存在多个null
- LinkedHashMap在Hashmao的基础上可以保证元素存入和取出的顺序一致
- TreeMap可以韩剧键进行默认的升序排序
- 如果键为自定义类型,则需要自定义排序规则,方式与TreeSet一致
- 键不可为null,否则排序会导致空指针
- 仍然在compareTo或者compare方法返回值为0时去重
- Hash table无法存放null值
- Propertoes只能存放String类型的数据
- 不建议使用多态
- 无法使用泛型
- setProperty(String,String):向集合中添加一个键值对
- String getProperty(String):根据键获取值
- liad(输入流):通过输入流将配置文件的内容读取到集合中
今日掌握
- Map的存储特点
- Map的常用实现类和特点
- Map的创建语法
- Mao的遍历方式