`

关于集合hashtable,hashmap,hashset,treemap,treeset

阅读更多

Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。 
1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。

2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。HashMap允许key值只能由一个null值,因为hashmap如果key值相同,新的key, value将替代久的。

3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。

4.HashTable使用Enumeration,HashMap使用Iterator。

以上只是表面的不同,它们的实现也有很大的不同。

5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);

static int hash(Object x) {
  int h = x.hashCode();

  h += ~(h << 9);
  h ^= (h >>> 14);
  h += (h << 4);
  h ^= (h >>> 10);
  return h;
}
static int indexFor(int h, int length) {
  return h & (length-1);
}
以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如
HashMap对null的操作。 HashMap可以看作三个视图:key的Set,value的Collection,Entry的Set。 这里HashSet就是其实就是HashMap的一个视图。HashSet内部就是使用Hashmap实现的,和Hashmap不同的是它不需要Key和Value两个值。
          
往hashset中插入对象其实只不过是内部做了

public boolean add(Object o) {

    return map.put(o, PRESENT)==null;
}


HashMap为散列映射,它是基于hash table的一个实现,它可在常量时间内安插元素,或找出一组key-value pair.HashSet为散列集,它把查找时间看的很重要,其中所有元素必须要有hashCode()
HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)

HashSet, TreeSet都是集合类型,如果对存储的数据没有顺序要求,两者可混用;但TreeSet可以对存储的数据进行排序和滚动,适合处理对数据经常分析的情况。

其他如果要同步可以通过Collections来实现,如:

SortedSet chaterNameSet ;
SortedMap nameToBean ;
chaterNameSet = Collections.synchronizedSortedSet(new TreeSet()) ;
nameToBean = Collections.synchronizedSortedMap(new TreeMap()) ;
//返回一个被new TreeSet()支持的安全线程列表
chaterNameSet = Collections.synchronizedSortedSet(new TreeSet()) ;
//返回一个被new TreeMap()支持的安全线程映射
nameToBean = Collections.synchronizedSortedMap(new TreeMap()) ;
synchronizedSortedSet()和synchronizedSortedMap()被用来获得各种类集的同步(安全线程)拷贝。因为没有任何一个标准类集实现是同步的。必须使用同步算法来为其提供同步。
另一种观点:同步类集的迭代函数必须在synchronized块内使用

分享到:
评论

相关推荐

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    ### Java中HashMap, LinkedHashMap, TreeMap,HashTable的区别 在Java编程语言中,`Map`接口是集合框架中的一个重要组成部分,用于存储键值对。本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, ...

    Java集合面试题汇总.pdf

    Map接口则不同于Collection,它是键值对存储的接口,常见的实现类有HashMap、TreeMap、Hashtable、ConcurrentHashMap和Properties。 集合框架的主要优点在于其提供的数据结构和算法。例如,ArrayList和LinkedList...

    java编程基础笔记(集合)

    Map接口用于存储键值对,HashMap、TreeMap和Hashtable是最常用的实现。HashMap提供了高效的查找性能,通过哈希表存储键值对,但不保证键的顺序。TreeMap按键的自然顺序或自定义比较器进行排序,而Hashtable是古老的...

    Java 72 道面试题及答案.docx

    2. Map接口:键值对集合的父接口,实现类有HashMap、TreeMap、HashTable等。 3. Set接口:无序、不可重复、唯一,实现类有HashSet、TreeSet、LinkedHashSet等。 4. List接口:有序、可重复、多个null元素,实现类有...

    Java集合类List-Set-Map的区别和联系.doc

    HashMap 是一个基于哈希表的集合类,HashTable 是一个线程安全的基于哈希表的集合类,TreeMap 是一个基于树形结构的集合类。 三、Collections Collections 是 Java 中提供的一个工具类,提供了对集合类的操作方法...

    对java基础集合部分(List、HashMap、HashSet、ArrayList等)底层源码的分析与总结

    本文主要探讨了几个关键的集合接口和实现类的底层源码,包括List、HashMap、HashSet等,以及它们的基本操作。 首先,Collection接口是所有单值集合的父接口,提供了增加、删除、遍历元素的基本方法。例如,`add()`...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java集合详解4:HashMap和HashTable Java集合详解5:深入理解LinkedHashMap和LRU缓存 Java集合详解6:TreeMap和红黑树 Java集合详解7:HashSet,TreeSet与LinkedHashSet Java集合详解8:Java集合类细节精讲 JavaWeb

    Java 72道面试题和答案.docx

    HashMap和TreeMap分别基于哈希表和红黑树,而Hashtable是线程安全的HashMap。 使用集合框架的优点包括: - 容量自增长:集合可以自动扩展其大小以适应更多的元素。 - 高性能的数据结构和算法:集合框架内置了高效的...

    java集合常见面试题.rar

    - **Set**:无序且不允许重复元素的集合,如HashSet和TreeSet。 - **Queue**:遵循先进先出(FIFO)原则的数据结构,如LinkedList可以作为队列使用。 - **Map**:存储键值对的数据结构,如HashMap和TreeMap。 2....

    Java 集合面试稳稳的.pdf

    Map接口用于存储键值对的集合,常用的实现类有HashMap、TreeMap、HashTable和ConcurrentHashMap。HashMap在JDK 1.7中基于数组+链表实现,在JDK 1.8中引入了红黑树以优化链表过长导致的性能问题。当链表长度超过8,且...

    Java面试题及答案-共72道.docx

    Java 集合框架详解 Java 集合框架是 Java 语言中用于存储和操作数据的重要组件。它提供了一些预定义的...Map 接口的实现类主要有 HashMap、TreeMap、Hashtable 等,分别基于数组+链表、红黑树和数组+链表结构实现的。

    java 集合总结

    Map接口是双值集合,存储键值对,如HashMap、TreeMap和Hashtable。HashMap是基于哈希表实现的,提供了快速的查找,但不保证键的顺序。TreeMap使用红黑树实现,保证了键的排序。Hashtable是古老的线程安全Map,但在...

    浅谈JAVA集合框架及其应用.pdf

    HashMap和TreeMap分别基于HashSet和TreeSet实现。HashMap提供了快速的键值查找,但不保证有序。TreeMap则按照键的自然顺序或Comparator进行排序。Properties是Hashtable的一个特例,常用于读取和修改配置文件。 在...

    java集合框架全面进阶.pdf

    实现Map接口的主要类包括HashMap、TreeMap、Hashtable和Properties。HashMap提供了最快的查找速度,而TreeMap保持键的排序。Hashtable是线程安全的,但它是同步的,因此比HashMap慢。Properties类继承自Hashtable,...

    72道Java面试题及答案

    - Set中的HashSet基于HashMap实现,LinkedHashSet基于HashMap并维护插入顺序,TreeSet基于红黑树。 - Map中的HashMap在JDK1.8之前是数组+链表,1.8后引入红黑树优化冲突处理,LinkedHashMap额外维护插入或访问顺序...

    集合框架的使用方法

    4. 映射(Map)接口:Map接口存储键值对,如HashMap、TreeMap和Hashtable。HashMap提供快速的查找,而TreeMap保持键的排序。 三、常用操作 1. 添加元素:add() 方法用于向集合添加元素,对于Set,如果元素已存在,...

    Java集合面试题 52道.pdf

    集合框架的底层数据结构主要有:ArrayList(Object数组)、LinkedList(双向循环链表)、HashSet(基于HashMap实现的)、LinkedHashSet(继承于HashSet,内部采用LinkedHashMap实现)、TreeSet(红黑树)、HashMap...

Global site tag (gtag.js) - Google Analytics