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();
} 
View Code

 hashmap实现原理。put()方法实现:首先hash(key)得到key的hashcode(),hashmap根据获得的hashcode找到要插入的位置所在的链,在这个链里面放的都是hashcode相同的Entry键值对,在找到这个链之后,会通过equals()方法判断是否已经存在要插入的键值对,而这个equals比较的其实就是key。所以这里首先重写hashcode()方法找到相同的链,然后重写equals方法以保证key相同

posted @ 2016-10-13 18:08  曹某某的博客  阅读(144)  评论(0)    收藏  举报