Map集合成员方法
增加功能
V put(K key, V value)
返回的是被覆盖的值当key在集合中不存在时,添加元素;当key在集合存在时候,替换元素
删除功能
void clear
清除所有键值对数据
V remove(Object key)
根据指定的键删除键值对
判断功能
boolean containsKey(Object key)
判断指定的键是否在集合中存在
boolean containsValue(Object value)
判断指定的值是否在集合中存在
boolean isEmpty
判断集合是否为空
获取功能
Set<Map.Entry<K,V>> entrySet()
键值对对象的集合
Object get(Object key)
根据键获取值
Set keySet():
所有键的集合
Collection values()
所有值的集合
长度
int size()
获取长度
Map集合的两种遍历方式
创建Map集合
// 创建集合对象
Map<String, String> map = new HashMap<String, String>();
// 创建并添加元素
map.put("杨过", "小龙女");
map.put("郭靖", "黄蓉");
map.put("梁山伯", "祝英台");
map.put("牛郎", "织女");
第一种遍历方式(通过keySet())
Set<String> keySet = map.keySet();
for(String key : keySet){
System.out.println("key:"+key+" value"+map.get(key));
}
第二种遍历方式(通过entrySet())
Set<Entry<String,String>> entrySet = map.entrySet();
for(Map.Entry<String, String> entry : entrySet){
System.out.println("key"+entry.getKey()+" value"+entry.getValue());
}
HashMap存储自定义对象实现去重 (将自定义对象存储到Key的位置)
HashMap
自定义对象重写hashCode()和equals()方法,并且使用HashMap
TreeMap
方案1:自定义对象实现Comparable 接口,并且重写compareTo方法
方案2:创建TreeMap集合对象时通过TreeMap的构造方法传入一个Comparator对象
TreeMap存储自定义对象实现排序 (将自定义对象存储到Key的位置
方案1
自定义对象实现Comparable 接口,并且重写compareTo方法
方案2
创建TreeMap集合对象时通过TreeMap的构造方法传入一个Comparator对象
Hashtable和HashMap区别
HashTable:
线程安全,效率低,不允许null键和值
HashMap:
线程不安全,效率高,允许null键和值
如果想线程安全,并且可以存储null怎么办,使用ConcurrentHashMap
|–Map(双列 底层结构是针对键有效,跟值无关)
|–HashMap
底层数据结构是哈希表。
线程不安全,效率高。允许null键和值
怎么保证唯一性的呢?
它依赖两个方法:hashCode()和equals()
顺序:
首先判断hashCode()值是否相同。
同:继续走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。
|–Hashtable
底层数据结构是哈希表。
线程安全,效率低。不允许null键和值
怎么保证唯一性的呢?
它依赖两个方法:hashCode()和equals()
顺序:
首先判断hashCode()值是否相同。
同:继续走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。
|–TreeMap
底层数据结构是二叉树。
线程不安全,效率高。
怎么保证唯一性的呢?是根据返回是否是0。
怎么保证排序的呢?两种方式
自然排序(元素具备比较性)
实现Comparable接口
方法:compareTo(obj)
比较器排序(集合具备比较性)
实现Comparator接口
方法:compare(obj1,obj2)