HashMap vs FastHashMap

部署运行你感兴趣的模型镜像

Test Code:

01 import java.util.HashMap;
02 import java.util.Map;
03 
04 import org.apache.commons.collections.FastHashMap;
05 
06 /**
07  <p>HashMapTester.java</p>
08  
09  <p>
10  * <a href="HashMapTester.java.html"><i>View Source</i></a>
11  </p>
12  
13  @author $Author$
14  @version $Reversion$ $Date$
15  */
16 public class HashMapTester {
17 
18     /**
19      
20      */
21     public HashMapTester() {
22         super();
23     }
24     
25     public static void main(String[] args){
26         int N = 50000;
27         long start = System.currentTimeMillis();
28         Map hm = new HashMap(N);
29         for(int i = 0; i < N ; i++){
30             hm.put(new Long(i),"HashMap " + i);
31         }
32         long end = System.currentTimeMillis() - start;
33         System.out.println("HashMap put " + N + " Object using" (end/1000.0"s");
34         start = System.currentTimeMillis();
35         FastHashMap fhm = new FastHashMap(N);
36         //fhm.setFast(false);
37         for(int i = 0; i < N ; i++){
38             fhm.put(new Long(i),"FastHashMap " + i);
39         }
40         end = System.currentTimeMillis() - start;
41         System.out.println("FastHashMap put " + N + " Object using" (end/1000.0"s");
42         
43         
44         start = System.currentTimeMillis();
45         for(int i = 0; i < N ; i++){
46             hm.get(new Long(i));
47         }
48         end = System.currentTimeMillis() - start;
49         System.out.println("HashMap get " + N + " Object using" (end/1000.0"s");
50         fhm.setFast(true);
51         start = System.currentTimeMillis();
52         for(int i = 0; i < N ; i++){
53             fhm.get(new Long(i));
54         }
55         end = System.currentTimeMillis() - start;
56         System.out.println("FastHashMap get " + N + " Object using" (end/1000.0"s");
57         
58     }
59 
60 }

Result:

HashMap put 50000 Object using1.021s
FastHashMap put 50000 Object using1.221s
HashMap get 50000 Object using0.561s
FastHashMap get 50000 Object using0.04s

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### Java中HashMapHashtable的区别及使用场景 在Java中,`HashMap`和`Hashtable`都是用于存储键值对的数据结构。然而,两者在设计、性能和线程安全性方面存在显著差异[^1]。 #### 1. 线程安全性 `Hashtable`是线程安全的,所有的方法都被同步了,这意味着在多线程环境中可以直接使用`Hashtable`而无需额外的同步机制[^1]。相比之下,`HashMap`不是线程安全的,在多线程环境下可能会导致数据不一致的问题。如果需要在多线程环境中使用`HashMap`,可以使用`Collections.synchronizedMap()`来包装它[^1]。 #### 2. 性能 由于`Hashtable`的方法被同步,这会导致性能开销,尤其是在高并发的情况下。而`HashMap`没有同步开销,因此在单线程或受控的多线程环境中通常表现更好[^1]。 #### 3. Null键和Null值支持 `HashMap`允许一个`null`键和多个`null`值。而`Hashtable`不允许`null`键或`null`值,如果尝试插入`null`键或值,会抛出`NullPointerException`。 #### 4. 迭代器 `HashMap`提供了一个快速失败(fail-fast)的迭代器,这意味着如果在迭代过程中检测到结构修改(非迭代器自身的`remove`方法),将抛出`ConcurrentModificationException`。而`Hashtable`的枚举器(enumerator)并不支持快速失败。 #### 5. 初始容量和加载因子 两者都允许设置初始容量和加载因子,但`HashMap`提供了更灵活的配置选项。默认情况下,`HashMap`的加载因子为0.75,而`Hashtable`的加载因子为0.62[^1]。 #### 使用场景比较 - **`HashMap`**:适用于单线程环境或不需要线程安全的场景。由于其更高的性能,`HashMap`通常是首选。 - **`Hashtable`**:适用于需要内置线程安全的场景。但在现代Java开发中,推荐使用`ConcurrentHashMap`作为替代,因为它提供了更好的性能和灵活性。 ```java // HashMap 示例 Map<String, String> hashMap = new HashMap<>(); hashMap.put("key1", "value1"); hashMap.put(null, "value2"); // 允许null键 System.out.println(hashMap.get(null)); // 输出: value2 // Hashtable 示例 Map<String, String> hashtable = new Hashtable<>(); hashtable.put("key1", "value1"); // hashtable.put(null, "value2"); // 抛出NullPointerException ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值