java集合之Map

Map集合类用于存储元素对,一个键映射到一个值。
查看Map
  如果想要查看Map,需要先获取Map的视图,有三种方式可以获取Map的视图
1.所有的键值对   entrySet()
2.所有键         keySet()
3.所有值         values()
entrySet和keySet分别返回一个Set对象,values则返回一个Collection对象,如果需要遍历,则还需要迭代这些集合元素。在entrySet、keySet、values里都有方法返回自己实现的迭代器。Set、Collection 、Iterator在使用时用的基础的Map视图,所以使用时效率会比较高,而在使用Map的toArray()方法时,需要创建副本,并对副本进行操作,所以效率方面不如前面的迭代器。
Map可以调用Map Collections.synchronizedMap(Map m),得到一个线程同步的Map
,返回的方法封装了HashMap的底层所有方法,所以在多线程的环境中也是安全的。
HashMap
HashMap本身是非线程安全的,哈希表的Map接口实现,允许null值和null键,当Key为null时,hash值为0,value放在当前链表的第一个。
HashMap 不允许重复的key,如果重复后一个value会覆盖前一个,所以HashMap里最多只能有一个键为值为null
如果HashMap里放一个集合对象那么,实际上放在value里的是它的指针,当后续对集合对象作出修改时,打印出来的对象是修改后的对象
当HashMap中的元素个数超过对象长度的0.75的时候,HashMap会自动增大一倍
HashMap默认的的长度是16,默认的负载因子是0.75,负载因子越大,查询速度越慢,负载因子越小,空间利用越高,空间利用越小,查询速度越快
HashMap是非线程安全的
两个不同对象的哈希值相等,即数据会存在一个链上
当对象o1 和 对象o2
o1.hashcode() == o2.hashcode()而且o1.equal(o2) = false的时候在HashMap里会以链表的形式存放 ,一般较少
o1.equal(o2)==true    o1.hashcode一定等于o2.hashcode
o1.equal(o2)!=true    o1.hashcode可能等于o2.hashcode

HashTable
HashTable是线程安全的,不允许null值为键,HashTable的默认长度是11,默认的负载因子是0.75,以后每次增长为原来的两倍,负载因子越大,查询速度越慢,负载因子越小,空间利用越高,空间利用越小,查询速度越快

你可能感兴趣的:(java,map)