java集合: List、Set、Map总结 + HashMap/Hashtable 差别

List:(有序,能够反复)通过下标索引

----ArrayList  可变数组,随机查找

----LinkedList    链表,不论什么位置插入删除快

----Vector    效率比arraylist低。可是能够用于多线程同步

Set:(无序,不能够反复)set最多有一个null元素。由于不能够反复

----HashSet    没有排序,不反复(顺序随机)

----LinkedHashSet    按插入排序。不反复(按插入顺序)

----TreeSet    实现Comparable接口,对象能够比較(依照插入值大小升序)(依照二叉树排序)

Map:(键值类似list中的下标。可是map下标是随意类型,list下标仅仅是int类型)

----HashMap    定位、插入删除一个映射搞笑    (顺序随机) 不同步,同意null value -- null key

----Hashtable    同步。不同意null键值

----LinkedHashMap    依照插入顺序排序    (按插入顺序)

----TreeMap    在遍历排好序的键值是高效的,实现Comparable接口    (依照键值升序)(依照二叉树排序)

Hashmap、Hashtable都是一个数组和链表的结合体(在数据结构称“链表散列“)

hashTable和hashMap的差别:

----Hashtable 中的方法是同步的。而HashMap中的方法在缺省情况下是非同步的。

----Hashtable中key和value都不同意null值,而HashMap中仅仅同意一个null键。值能够为null。

----HashMap效率比Hashtable高

----继承不同。

public class Hashtable extends Dictionary implements Map
public class HashMap  extends AbstractMap implements Map

----哈希值的使用不同,Hashtable直接使用对象的hashCode。而HashMap又一次计算hash值,并且用与取代求模

----Hashtable中hash数组默认大小是11。添加的方式是 old*2+1。

HashMap中hash数组的默认大小是16,并且一定是2的指数。

----Hashtable、HashMap都使用了 Iterator。而因为历史原因,Hashtable还使用了Enumeration的方式

详细使用:

Map map = new HashMap();
map.put("a","100");
map.put("b","200");
map.put("c","200");

Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry entry = (Map.Entry) iter.next();
    Object key = entry.getKey();
    Object val = entry.getValue();
}
//或者
for(Map.Entry entry : map.entrySet()){
    Object key = entry.getKey();
    Object value = entry.getValue();
}


Java的类为什么须要hashCode?(hashCode的作用)

总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。你知道它们的差别吗?前者集合内的元素是有序的。元素能够反复;后者元素无序,但元素不可反复。那么这里就有一个比較严重的问题了:要想保证元素不反复,可两个元素是否反复应该根据什么来推断呢?这就是 Object.equals方法了。

可是,假设每添加一个元素就检查一次,那么当元素非常多时,后加入到集合中的元素比較的次数就非常多了。

也就是说,假设集合中如今已经有1000个元素。那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大减少效率。

于是。Java採用了哈希表的原理。哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。关于哈希算法。这里就不具体介绍。能够这样简单理解,hashCode方法实际上返回的就是对象存储位置的映像。

这样一来。当集合要加入新的元素时,先调用这个元素的hashCode方法,就能定位到它应该放置的存储位置。

假设这个位置上没有元素,它就能够直接存储在这个位置上,不用再进行不论什么比較了。假设这个位置上已经有元素了,就调用它的equals方法与新元素进行比較,同样的话就不存了,不同样就表示发生冲突了。散列表对于冲突有详细的解决的方法,但终于还会将新元素保存在适当的位置。这样一来,实际调用equals方法的次数就大大减少了,差点儿仅仅须要一两次。

1、相等的对象必须具有相等的哈希码(或者散列码)。

2、假设两个对象的hashCode同样,它们并不一定同样。

(hashCode()相等的equals()不一定相等;equals()相等的hashCode()肯定相等)

请注明出处:http://blog.csdn.net/df1012890048/article/details/38672155

时间: 2024-10-14 05:58:14

java集合: List、Set、Map总结 + HashMap/Hashtable 差别的相关文章

java集合List、Set、Map总结 + HashMap/Hashtable区别

List:(有序,可以重复)通过下标索引 ----ArrayList  可变数组,随机查找 ----LinkedList    链表,任何位置插入删除快 ----Vector    效率比arraylist低,但是可以用于多线程同步 Set:(无序,不可以重复)set最多有一个null元素,因为不可以重复 ----HashSet    没有排序,不重复(顺序随机) ----LinkedHashSet    按插入排序,不重复(按插入顺序) ----TreeSet    实现Comparable接

Java集合详解4:HashMap和HashTable

Java集合详解4:HashMap和HashTable 今天我们来探索一下HashMap和HashTable机制与比较器的源码. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 喜欢的话麻烦star一下哈 文章首发于我的个人博客: https://h2pl.github.io/2018/05/10/collection4 更多关于Java后端学习的内容请到我的CSDN博客上查看:https://blog.csdn.net/a724888 我的个

【Java集合源码剖析】HashMap源码剖析

转载请注明出处:http://blog.csdn.net/ns_code/article/details/36034955 HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap. HashMap 实现了Serializable接口,因此它支持序列化,

Java 集合系列 08 Map架构

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和

【Java集合源码剖析】HashMap源码剖析(转)

HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap. HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆. HashMap源码剖析 HashMap的源码如下(加入了比较详细的注释): [ja

Java 集合系列 15 Map总结

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和

Java集合(5)一 HashMap与HashSet

目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) Java集合(4)一 红黑树.TreeMap与TreeSet(下) Java集合(5)一 HashMap与HashSet 引言 HashMap<K,V>和TreeMap<K,V>都是从键映射到值的一组对象,不同的是,HashMap<K,V>是无序的,而TreeMap<K,V>是有序的,相应的

Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)

http://www.cnblogs.com/skywang12345/p/3311126.html 概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3311126 第1部分 Map概括 (01) Map

Java容器深入浅出之Map、HashMap、Hashtable及其它实现类

在Java中,Set的底层事实上是基于Map实现的,Map内部封装了一个Entry内部接口,由实现类来封装key-value对,当value值均为null时,key的集合就形成了Set.因此,Map集合具有如下的一些特点: 1. Key集因为是Set的实现,因此是无顺序.不可重复的. 2. Value集是List的实现,因此是可以重复的,每个元素根据key来索引. 3. Map内部包含一个Entry内部接口,用于定义key-value对,由实现类来对外提供查找和设置value的方法. Map的基