Java (集合 Map)

Java (集合 Map)_第1张图片
插入数据100万次,最慢Linkedmap(1038),最快treemap(216),中间HashMap(401)。


HashMap的工作原理(无序输出):常用于Map 中插入、删除和定位元素

HashMap的 特性:HashMap可以接受null键值和值HashMap很快;以及HashMap储存的是键值对

HashMap 基于hashing 原理:我们通过put ( ) 和get ( ) 方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,然后找到bucket ( 桶 ) 位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用 LinkedList来解决碰撞问题 , 当发生碰撞了,对象将会储存在LinkedList的下一个节点中。 HashMap在每个LinkedList节点中储存键值对对象。当两个不同的键对象的hashcode相同时会发生什么? 它们会储存在同一个bucket位置的LinkedList中。键对象的equals()方法用来找到键值对。

如果HashMap 的大小超过额负载因子定义的容量。默认的负载因子大小为0.75,也就是说,当一个map填满了75%的bucket时候,和其它集合类(如ArrayList等)一样,将会创建原来HashMap大小的两倍的bucket数组,来重新调整map的大小,并将原来的对象放入新的bucket数组中。这个过程叫作rehashing,因为它调用hash方法找到新的bucket位置。

HashMap与HashTable的区别:

①、Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。

②、也许最重要的不同:Hashtable的方法是同步的,HashMap的方法不是。

③、只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。

                        HashMap               Hashtable

父类                  AbstractMap          Dictiionary

是否同步            否(线程不安全)            是(线程安全)

k,v可否null      是                            否

Hashtable  -->contains( ) , HashMap—>containsKey( ).

hashCode 、"==" 和 equals 的区别:

1. '=='是用来比较两个变量(基本类型和对象类型)的值是否相等的,如果两个变量是基本类型的,直接比较值。如果两个变量是对象类型的,它比较的是这两个对象在栈中的引用(即地址)。

2.Object类中的equals方法就是用'=='来比较的,所以如果没有重写equals方法,equals和==是等价的。

3. Object类中的 hashCode(散列表中用来确定存储地址的一个字符串)是返回对象在内存中地址转换成的一个int值(可以就当做地址看)。所以如果没有重写hashCode方法,任何对象的hashCode都是不相等的。hashCode() 就传入的数据进行算法计算(算法可以不同,但是结果一样,在进行equals比较?),

注意 :String、Integer、Boolean、Double等这些类都重写了equals和hashCode方法,这两个方法是根据对象的内容来比较和计算hashCode的。所以只要对象的基本类型值相同,那么hashcode就一定相同。

4.equals(内存地址)相等的两个对象,hashcode()一般是相等的,最好在重写equals()方法时,必须重写hashcode()方法;hashcode()不等,一定能推出equals()也不等;

Hashtable:Hashtable 的实例有两个参数影响其性能:初始容量 和加载因子。容量 是哈希表中桶 的数量,初始容量 就是哈希表创建时的容量。

TreeMap(有序输出自然顺序) :自定义顺序遍历键

是有序输出,如果map中的元素是字符串类型,那么按照字典顺序进行排序,整型按照从小到大的升序进行。

LinkedHashMap(插入顺序):需要输出的顺序和输入的相同 , 也可以按读取顺序来排列.

类结构:

public class LinkedHashMap  extends HashMap  implements Map

LinkedHashMap是HashMap的一个子类,它保留插入的顺序。是Map接口的哈希表和链接列表实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

你可能感兴趣的:(Java (集合 Map))