Map(接口)集合
Map集合:该集合存储键值对,并且保持键的唯一性
共性方法:
1:添加: put(K key, V value) putAll(Map<? extends K,? extends V> m)
----------Map第二次put已有的键,新值会覆盖旧值。put方法会返回旧值或null。
2:删除: clear() remove(Object key)
3:判断: containsKey(Object key) containsValue(Object value) isEmpty()
4:获取: get(Object key) size() values()
//为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。
(1)Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的,效率低
(2)HashMap:底层是哈希表数据结构,可以存入null键null值。该集合是线程同步的,效率高
(3)TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序
map集合的两种取出方式:
(1)keySet:将map中所有的键存入Set集合,因为Set具有迭代器,所以可以以迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。
(2)Set<Map.Entry<k,v>> entrySet: 将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是Map.Entry。
Set<Map.Entry<String, String>> entrySet = map.entrySet(); Iterator<Map.Entry<String, String>> it = entrySet.iterator(); while(it.haxNext()) { Map.Entry<String, String> me = it.next(); String key = it.getKey(); String value = it.getValue(); }
hashmap实现原理。put()方法实现:首先hash(key)得到key的hashcode(),hashmap根据获得的hashcode找到要插入的位置所在的链,在这个链里面放的都是hashcode相同的Entry键值对,在找到这个链之后,会通过equals()方法判断是否已经存在要插入的键值对,而这个equals比较的其实就是key。所以这里首先重写hashcode()方法找到相同的链,然后重写equals方法以保证key相同

浙公网安备 33010602011771号