Map接口
- Map接口定义的集合又称查找表,用于存储所谓"Key- Value" 映射对。Key可以看成是Value的索引,作为Key的对象在集合中不可以重复。
- 根据内部数据结构的不同, Map接有多种实现类,其中常用的有内部为hash表实现的HashMap和内部为排序二叉树实现的TreeMap。
put()方法
- Map接口定义了向Map中存放元素的put方法:
– V put( K key,V value) - 将Key-Value对存入Map,如果在集合中已经包含Key,则操作将替换该Key所对应的Value,返回值为该key原来所对应的value(如果没有返回null)
案例
get()方法
- Map接口中定义了从Map中获取元素的get方法:
– V get (Object key) - 返回参数key所对应的value对象,如果不存在返回null
案例
containsKey()方法
- Map接口中定义了判断某个key是否在Map中存在:
– boolean containsKey(Object key);
若Map中包含给定的key则返回terue,否则返回false
案例
HashMap
Hash表原理
hashCode方法
- 从HashMap的原理中我们可以看到, key的hashCode()方法的返回值对HashMap存储元素时会起着很重要的作用。而hashCode(方法实际 上是在Object中定义的。那么应当妥善重写该方法:
- 对于重写了equals方法的对象一般要妥善的重写继承自Object类的hashCode方法( Object提供的hashCode方法将返回该对象所在内存地址的整数形式)。
- 重写hashCode方法是需注意两点:其一、与equals方法的一致性,即equals比较返回true的两个对象其hashCode方法返回值应该相同;其二、hashCode返回的数值应符合hash算法的要求,试想如果有很多对象的hashCode方法返回值都相同,则会大大降低hash表的效率,一般情况下可以使用IDE (如Eclipse )提供的工具自动生成hashCode方法。
重写hashCode方法
Map的遍历
使用keyset方法
- Map提供了三种遍历方式:
– 遍历所有的key
– 遍历所有的key-value对
– 遍历所有的value(不常用) - 遍历所有key的方法:
– Set keySet();
– 该方法会将当前Map中所有的key存入一个Set集合后返回
案例
使用entryset()方法
- 遍历所有的键值对的方法:
– Set <Entry<K,V>> entrySet()
– 该方法会将当前Map中每一组key-value对封装为一个Entry对象并存入一个Set集合后返回
案例
使用values()方法
- 遍历所有的Value
– Collection values();
案例
Collection<Integer> values=map.values();
for(Integer i:values) {
System.out.println("value:"+i);
}