Map 查找表 基础知识(一)

Map 查找表
Map结构的样子是一个多行两列的表格,左列称为key,右列称为value,Map总是以key-value对的形式保存一组数据。并且获取信息是根据key(键)查找对应的value(值)。
常用实现类: HashMap 散列表,使用散列算法实现的Map,当今查询速度最快的数据结构。
本文章也只讨论HashMap类的常用知识。

  1. 常用方法
  2. 关于equals重写的注意事项

1.常用方法

插入元素

map.put(key, value);

Map有一个要求,key不允许重复,是否重复也是依靠key自身equal比较的结果。 如果以map中已有的key存入key-value针对则是替换value操作, 那么返回值为被替换的value,否则是null.


获取元素

map.get("key");

删除元素

 map.remove("key");

判断是否包含键或值

boolean containsKey(K k)
boolean containsValue(V v)

遍历操作
1.遍历键

Set<K> keySet()
Set keySet = map.keySet();
        for(String key : keySet){
            System.out.println("key:"+key);
        }

2.遍历值

Collection<V> values() 
Collection values = map.values();
        for(Integer value : values){
            System.out.println("value:"+value);
        }

3.遍历键值对

Set<Entry> entrySet()
Set<Entry<String,Integer>> entrySet = map.entrySet();
        for(Entry<String,Integer> entry : entrySet){
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+":"+value);
        }

java.util.Map.Entry
* Entry是Map的一个内部接口,其实现类的每一个实例用于表示当前Map的一组键值对。
该接口规定了获取其表示的这组键值对的key与value的方法
K getKey()
V getValue()
不同的Map都实现了Entry,并用实现类实例表示其每一组键值对,HashMap也一样


2.关于equals重写的注意事项

HashMap是当今查询速度最快的数据结构,内部使用数组实现,
HashMap可以根据key的hashcode值计算出其在数组对应的下标位置
这省去了遍历数组查询的工作,从而查询性能不受数据量所影响。

会影响HashMap查询性能的情况是在HashMap中产生链表,而产生链表的一个主要情况为:
当两个key的hashcode值相同,但是equals比较不一样时,HashMap中就会产生链表。

注:hashcode决定元素在数组中的位置,equals决定key是否重复。
为此,API手册对于这两个方法有明确说明:
1.成对重写
当需要重写一个类的equals方法时,就要连同重写hashCode方法
2.一致性
当两个对象equals比较为true时,hashCode方法返回的数字必须相等。
反之亦然(不是必须), hashCode相等时,equals比较尽量保证为true。因为若使用这个类的实例作为
key在HashMap中使用时,若两个对象hashCode值相等,但equals比较不为true时会产生链表。
3.稳定性
当参与equals比较的属性值没有发生改变的前提下,多次调用hashCode方法返回的数字应当保持不变。
所以遇到要重写的时候,使用eclipse自带的重写hashCode和equals的功能。
快捷键(alt+shift+s 接 h)。

你可能感兴趣的:(Map 查找表 基础知识(一))