List
ArrayList:底层由数组实现,查询速度快
LinkedList:由双向链表实现,适合要经常在表中插入和删除元素
Set
TreeSet:基于TreeMap,可以排序,速度比HashSet慢
HashSet:最常用,查询速度最快
LinkedHashSet:保持元素插入的次序,插入操作LinkedHashSet比HashSet的代价更高,维护链表需要额外的开销
Map
HashMap:查询速度快,首选
TreeMap:可以排序
LinkedHashMap:保持元素插入的次序,插入操作比HashMap性能差,需要维护链表。但是迭代速度快。
hash算法:
主要是为了提高存取速度,以时间换空间。数组的访问速度是最快的,参照数组的实现方式,可以将Map的key作为数组的下标。数组不能调整容量,Map中保存的数量不确定,因此可以通过key产生一个数字作为数组的下标。将Map中的对象按照key均匀的分布到指定的数组。不同的key可以可能产生相同的数字。
HashMap访问说明,通过key得到数字hashCode作为数组下标访问到该数组对象,数组对象包含hashCode相同的Map,这个Map是经过筛选的,数据量比较小,通过key在该Map中查找对象。
这样看来hash算法也就是将数据归类,访问数据的时候到自己属于的类去查找。数据能够均匀的归类是hash算法的精华所在。