是什么区别HashMap,LinkedHashMap而TreeMap在Java中?我没有看到输出有任何差异,因为所有三个都有keySet和values.什么是Hashtables?
Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet());
print(m1.values());
SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet());
print(sm.values());
LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet());
print(lm.values());
Run Code Online (Sandbox Code Playgroud)
Ser*_*hyk 1557
我更喜欢视觉呈现:
????????????????????????????????????????????????????????????????????????????????
? Property ? HashMap ? TreeMap ? LinkedHashMap ?
????????????????????????????????????????????????????????????????????????????????
? Iteration ? no guarantee order ? sorted according ? ?
? Order ? will remain constant? to the natural ? insertion-order ?
? ? over time ? ordering ? ?
????????????????????????????????????????????????????????????????????????????????
? Get/put ? ? ? ?
? remove ? O(1) ? O(log(n)) ? O(1) ?
? containsKey ? ? ? ?
????????????????????????????????????????????????????????????????????????????????
? ? ? NavigableMap ? ?
? Interfaces ? Map ? Map ? Map ?
? ? ? SortedMap ? ?
????????????????????????????????????????????????????????????????????????????????
? ? ? ? ?
? Null ? allowed ? only values ? allowed ?
? values/keys ? ? ? ?
????????????????????????????????????????????????????????????????????????????????
? ? Fail-fast behavior of an iterator cannot be guaranteed ?
? Fail-fast ? impossible to make any hard guarantees in the presence of ?
? behavior ? unsynchronized concurrent modification ?
????????????????????????????????????????????????????????????????????????????????
? ? ? ? ?
?Implementation? buckets ? Red-Black Tree ? double-linked ?
? ? ? ? buckets ?
????????????????????????????????????????????????????????????????????????????????
? Is ? ?
? synchronized ? implementation is not synchronized ?
????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
Mic*_*rdt 1131
这三个类都实现了Map接口,并提供了大部分相同的功能.最重要的区别是条目的迭代顺序:
HashMap绝对不保证迭代顺序.当添加新元素时,它甚至可以(并且将)完全改变.TreeMap将根据其compareTo()方法(或外部提供的Comparator)按键的"自然排序"进行迭代.此外,它实现了SortedMap接口,该接口包含依赖于此排序顺序的方法.LinkedHashMap 将按照条目放入地图的顺序进行迭代"Hashtable"是基于散列的映射的通用名称.在Java API的上下文中,
Hashtable是一个过时的类,它来自Java 1.1之前的集合框架.它不应再被使用,因为它的API混杂着复制功能的过时方法,并且它的方法是同步的(这会降低性能并且通常是无用的).使用ConcurrentHashMap而不是Hashtable.
Eya*_*der 63
这三个都表示从唯一键到值的映射,因此实现了Map接口.
HashMap是基于键散列的映射.它支持O(1)get/put操作.密钥必须具有一致的实现hashCode()并且equals()为此工作.
LinkedHashMap与HashMap非常相似,但它增加了对添加(或访问)项目的顺序的认知,因此迭代顺序与插入顺序(或访问顺序,取决于构造参数)相同.
TreeMap是基于树的映射.其put/get操作需要O(log n)时间.它要求项目具有一些比较机制,可以使用Comparable或Comparator.迭代顺序由此机制确定.
小智 37
Ogr*_*m33 35
从我自己的地图经验中获得更多的输入,当我使用每个地图时:
removeEldestEntry()方法创建Cache对象提供了一个很好的起点.这使您可以使用您定义的某些条件创建可以使数据到期的Cache对象.roo*_*ler 17
所有这三个班HashMap,TreeMap和LinkedHashMap工具java.util.Map接口,并表示从唯一关键值映射.
A HashMap包含基于密钥的值.
它只包含独特的元素.
它可能有一个空键和多个空值.
它没有维持秩序.
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
LinkedHashMap包含基于密钥的值.它与HashMap相同,而是维护插入顺序.//见下面的课程减速
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
TreeMap包含基于密钥的值.它实现了NavigableMap接口并扩展了AbstractMap类.它与HashMap维持升序相同(使用其键的自然顺序排序).
public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable
这是一个遗产类.
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable
参考:http://javarevisited.blogspot.in/2015/08/difference-between-HashMap-vs-TreeMap-vs-LinkedHashMap-Java.html
Ruc*_*era 14
HashMap绝对不保证迭代顺序.当添加新元素时,它甚至可以(并且将)完全改变.TreeMap将根据其compareTo()方法(或外部提供的Comparator)根据键的"自然排序"进行迭代.此外,它还实现了SortedMap接口,该接口包含依赖于此排序顺序的方法.LinkedHashMap将按照条目放入地图的顺序进行迭代
看看性能如何变化..

树图是排序图的一种实现.由于自然排序,put,get和containsKey操作的复杂性为O(log n)
@Amit:SortedMap是一个接口,TreeMap而是一个实现SortedMap接口的类.这意味着如果遵循SortedMap要求其实施者做的协议.除非实现为搜索树,否则树不能为您提供有序数据,因为树可以是任何类型的树.因此,为了使TreeMap像分类顺序一样工作,它实现了SortedMap(例如,二进制搜索树 - BST,平衡BST,如AVL和RB树,甚至三元搜索树 - 主要用于按顺序迭代搜索).
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements SortedMap<K,V>, Cloneable, Serializable
Run Code Online (Sandbox Code Playgroud)
在NUT-SHELL中
HashMap:给出O(1)中的数据,没有排序
TreeMap :使用有序键在O(log N),base 2中提供数据
LinkedHashMap:是具有链表的哈希表(想想indexed-SkipList)能够以插入树中的方式存储数据.最适合实施LRU(最近最少使用).
小智 6
以下是HashMap和TreeMap之间的主要区别
HashMap不维护任何订单.换句话说,HashMap没有提供任何保证首先插入的元素将首先打印,其中就像TreeSet一样,TreeMap元素也根据其元素的自然顺序排序
内部HashMap实现使用Hashing和TreeMap在内部使用Red-Black树实现.
HashMap可以存储一个空键和许多空值.TreeMap不能包含空键,但可能包含许多空值.
HashMap为get和put等基本操作提供恒定时间性能,即O(1).根据Oracle文档,TreeMap为get和put方法提供了保证log(n)时间成本.
HashMap比TreeMap快得多,因为对于大多数操作,HashMap的执行时间对于日志时间TreeMap是恒定的.
HashMap使用equals()方法进行比较,而TreeMap使用compareTo()方法来维护排序.
HashMap实现了Map接口,而TreeMap实现了NavigableMap接口.
哈希图不保留插入顺序。
例。Hashmap如果您要插入密钥
1 3
5 9
4 6
7 15
3 10
Run Code Online (Sandbox Code Playgroud)
它可以存储为
4 6
5 9
3 10
1 3
7 15
Run Code Online (Sandbox Code Playgroud)
链接的哈希图保留插入顺序。
例。
如果要插入密钥
1 3
5 9
4 6
7 15
3 10
Run Code Online (Sandbox Code Playgroud)
它将存储为
1 3
5 9
4 6
7 15
3 10
Run Code Online (Sandbox Code Playgroud)
与我们插入的相同。
树状图按键的递增顺序存储值。例。
如果要插入密钥
1 3
5 9
4 6
7 15
3 10
Run Code Online (Sandbox Code Playgroud)
它将存储为
1 3
3 10
4 6
5 9
7 15
Run Code Online (Sandbox Code Playgroud)
哈希映射:
LinkedHashMap:
树图:
| 归档时间: |
|
| 查看次数: |
584340 次 |
| 最近记录: |