对比 HashMap,HashTable,TreeMap区别?很多人不知道

开发 前端
HashMap实现了Map接口,继承AbstractMap,它是基于哈希表的 Map 接口的实现。

[[376037]]

本文转载自微信公众号「程序员漫画编程」,作者程序职场 。转载本文请联系程序员漫画编程公众号。   

01概念

HashMap

HashMap实现了Map接口,继承AbstractMap,它是基于哈希表的 Map 接口的实现。

HashMap是引用数据类型。

Hashtable

Hashtable:是Map接口的另外一个实现类,和HashMap用法类似,同时也有区别。

treeMap

TreeMap:基于红黑树(Red-Black tree)的 NavigableMap实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法。

02区别

1. HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。

2. HashTable不允许null值,key和value都不可以,HashMap允许null值,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。

7,这三个都对Map接口进行了实现

03安全性

1.HashMap是不安全的线程,他允许Key值出现一次null Value值出现无数次的Null

2.Hashtable是安全的线程,他不仅实现了Map接口也实现了Dictionary接口,他的key值与Value值都不允许出现Null

3.treeMap 非线程安全 可以进行排序的,默认按照键的自然顺序进行升序排序,若要进行降序排序则需要在构造集合时候传递一个比较器。

04关系图

05实例应用

  1. class  HashMaps    
  2. {    
  3.        public static void main(String[] args)     
  4.       {    
  5.             Map map=new HashMap();                
  6.             map.put(“a”, “aaa”);    
  7.             map.put(“b”, “bbb”);    
  8.             map.put(“c”, “ccc”);    
  9.             map.put(“d”, “ddd”);    
  10.             Iterator iterator = map.keySet().iterator();                
  11.             while (iterator.hasNext()) {    
  12.              Object key = iterator.next();    
  13.              System.out.println(“map.get(keyis :”+map.get(key));    
  14.             }          
  15.                    
  16.  
  17.             Hashtable tab=new Hashtable();                
  18.             tab.put(“a”, “aaa”);    
  19.             tab.put(“b”, “bbb”);    
  20.             tab.put(“c”, “ccc”);    
  21.             tab.put(“d”, “ddd”);    
  22.             Iterator iterator_1 = tab.keySet().iterator();    
  23.             while (iterator_1.hasNext()) {    
  24.              Object key = iterator_1.next();    
  25.              System.out.println(“tab.get(keyis :”+tab.get(key));    
  26.             } 
  27.  
  28.  
  29.             TreeMap tmp=new TreeMap();                
  30.             tmp.put(“a”, “aaa”);    
  31.             tmp.put(“b”, “bbb”);    
  32.             tmp.put(“c”, “ccc”);    
  33.             tmp.put(“d”, “ddd”);    
  34.             Iterator iterator_2 = tmp.keySet().iterator();    
  35.             while (iterator_2.hasNext()) {    
  36.              Object key = iterator_2.next();    
  37.              System.out.println(“tmp.get(keyis :”+tmp.get(key));    
  38.             }             
  39.         }    
  40.     } 
责任编辑:武晓燕 来源: 程序员漫画编程
相关推荐

2020-06-29 08:28:36

v-for 解构函数

2020-07-14 08:43:54

VueHTML函数

2015-07-22 11:53:29

云计算AWS分析瘫痪

2021-08-24 00:13:23

Windows 10Windows微软

2021-08-27 10:03:12

人工智能AI

2020-11-20 06:13:04

Like %

2019-01-07 09:27:39

2022-12-05 15:23:33

JavaScript技巧运算符

2020-07-07 08:35:53

VueKey组件

2020-07-01 08:36:43

CSS规范web

2018-08-10 10:36:25

SSL证书误区

2019-12-13 19:52:29

人工智能AI

2023-06-05 08:07:34

聚集索引存储数据

2021-01-12 12:33:20

Pandas技巧代码

2021-01-07 05:27:20

包导入变量

2022-06-23 13:13:36

GitHub开发技巧

2021-05-08 23:19:25

微信存储小程序

2019-03-25 15:21:42

浏览器 Edge 微软

2021-11-02 19:14:58

Spring数据

2021-09-07 11:20:02

binlogMySQL数据库
点赞
收藏

51CTO技术栈公众号