Map接口
- Map存储的是键值对(键是唯一的,不可重复,值可以重复)
- 常用的实现子类为:
HashMap<K,V> 存储数据用哈希表结构,无序,因为要保证键的唯一 要重写hashCode和equals方法
LinkedHashMap<K,V> 采用哈希表结构+链表结构,通过链表结构可以保证存取顺序一致,通过哈希表结构可以保证键的唯一,需要重写hashCode和equals方法
-
HashMap
- 常用方法
- V put<K,V> 将键值对存储到集合中 K为键的对象 V为值的对象
存储的是重复的键的时候,将原有的值覆盖
返回值,当存储的值是不重复的,为null 重复的时候是 “覆盖之前的值”
- V get(K) 通过键获取值
如果集合中没有这个键 返回null
- V remove(K) 移除集合中的键值对,返回被移除之前的值
移除的是集合中没有的,则返回null
- 遍历 增强for不能遍历map
- Map集合的方法 keySet() 把所有的键存储到Set集合,返回的set是HashMap中的内部类KeySet的对象
使用keySet,将所有的键存储到Set集合中
遍历Set集合,获取出Set集合中的所有元素(Map中的键)
调用get,通过键获取值
- Entry接口(内部类) Entry<K,V> 静态的接口(直接用map接口调用) 包含方法 K getKey()获取键 V getValue()获取值 获取内部类 需要Map.Entry
Entry表示对应关系 遍历思想 可以通过Entry的对象(对应关系)来获取遍历
Map中有一个 entrySet()方法 获取键值对的对应关系(键是夫 值是妻 则对应关系就是结婚证)
实现步骤
Map <String , String> map = new HashMap<String,String>();
//1.调用map集合方法entrySet 将集合中的对应关系存储到Set集合中
Set< Map.Entry<String,String> > set = map.entrySet();
//2.迭代Set集合
Iterator< Map.Entry<String,String> > it = set.iterator();
while(it.hasNext()){
//3.获取出Set集合的元素,就是 映射关系对象
Map.Entry<String,String> entry = it.next();
//4.通过映射关系对象方法 getKey getValue 方法获取键值对
String key = entry.getKey();
String value = entry.getValue();
}
-
LinkedHashMap 继承HashMap 保证迭代的顺序
- Map接口实现类Hashtable 线程安全 运行速度慢 不允许存储null值 null键(被取代,不建议使用)
- Map接口实现类HashMap 线程不安全 运行速度快 允许存储null值 null键
- Hashtable的子类properties 经常使用
方法的可变参数 int...a 类型确定 个数不确定的时候使用 本质就是一个数组
注意事项:一个参数列表只允许使用一个可变参数 可变参数需要放到参数列表的末尾