java基础:Map


Map接口

Map接口是一个独立的接口,没有继承Collection接口;接口描述了从不重复的键到值的映射。

Map接口中的方法分为类:查询,修改,块操作,提供视图,比较和希哈

public interface Map<K,V> {
// 查询
	int size();
	boolean isEmpty();
	boolean containsKey(Object key);
	boolean containsValue(Object value);
	V get(Object key);
// 修改
	V put(K key, V value);
	V remove(Object key);
// 块操作
	void putAll(Map<? extends K, ? extends V> m);
	void clear();
// 视图
	Set<K> keySet();	// 因为key值不允许重复,所以用Set
	Collection<V> values();	// 而value值是允许重复的,所以用Collection
	Set<Map.Entry<K, V>> entrySet();	// Map 的 entrySet() 方法返回一个实现 Map.Entry 接口的对象集合。集合中每个对象都是底层 Map 中一个特定的键-值对。
	interface Entry<K,V> {//详细介绍:http://zhidao.baidu.com/question/32679780.html
		K getKey();
		V getValue();
		V setValue(V value);
		boolean equals(Object o);
		int hashCode();
    }
// 比较 希哈
	boolean equals(Object o);
	int hashCode();
}

对于 Map 接口,在“集合框架”中也有两个常规实现类,和 Set 接口类似,他们是:

HashMap

更适合Map中插入、删除和定位元素

使用HashMap要求添加的键类明确定义了hashCode()实现

TreeMap

适合按顺序遍历键。

有了TreeMap实现,添加到映射的元素一定是可排序的

实例:

public class Demo {
        public static void main(String[] args) throws Exception {
        	String[] arg={"zhang","jin","yu","is","zhang","yun","yuan's","borather","and","is","wang","qi's","husband"};
        	Map map=new HashMap<>();
        	Integer ONE=new Integer(1);
        	for(int i=0, n=arg.length; i<n; i++){
        		String key=arg[i];
        		Integer frequency=(Integer)map.get(key);
        		if(frequency==null){
        			frequency=ONE;
        		}else{
        			int value=frequency.intValue();
        			frequency=new Integer(value+1);
        		}
        		map.put(key, frequency);
        	}
        	System.out.println(map);
        	Map sorted_map=new TreeMap(map);
        	System.out.println(sorted_map);
        }
}
运行结果:
{jin=1, is=2, yu=1, qi's=1, yuan's=1, zhang=2, yun=1, borather=1, husband=1, wang=1, and=1}
{and=1, borather=1, husband=1, is=2, jin=1, qi's=1, wang=1, yu=1, yuan's=1, yun=1, zhang=2}
结果分析:

当map中已经有一个Key为“zhang”时,再往其中添加Key值为“zhang”的key-value对会覆盖之前的。
 

为了优化HashMap空间的使用,可以调优初始容量和负载因子。这个TreeMap没有调优选项,因为该树总处于平衡状态(和Set中一样)。

AbstractMap(抽象类)

AbstrctMap类也覆盖了equals()hashCode()方法,以确保两个相等映射返回相同的散列码。如果两个映射大小相等、包含同样的键且每个键在这两个映射中对应的值都相同,则这两个映射相等。按定义,映射的散列码是映射元素散列码的总和,其中每个元素是Map.Entry接口的一个实现。因此,不论映射内部顺序如何,两个相等映射会报告相同的散列码。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值