HashMap,LinkedHashMap,TreeMap读取大量数据效率的比较

简介: HashMap,LinkedHashMap,TreeMap读取大量数据效率的比较
  @Test
  public void test() {
    Integer count =1000000;
    Random random =new Random();
    Map<String, String> map = new HashMap<String, String>();
    for (int i = 0; i < count; i++) {
      map.put(i+"", i+"");
    }
    long time1 = System.currentTimeMillis();
    for (int i = 0; i < count; i++) {
      map.get((random.nextInt(count)+1)+"");
    }
    long time2 = System.currentTimeMillis();
    System.out.println("HashMap time:" + (time2 - time1));
    Map<String, String> linkedMap = new LinkedHashMap<String, String>();
    for (int i = 0; i < count; i++) {
      linkedMap.put(i+"", i+"");
    }
    time1 = System.currentTimeMillis();
    for (int i = 0; i < count; i++) {
       linkedMap.get((random.nextInt(count)+1)+"");
    }
    time2 = System.currentTimeMillis();
    System.out.println("LinkedHashMap time:" + (time2 - time1));
    Map<String, String> treeMap = new TreeMap<String, String>();
    for (int i = 0; i < count; i++) {
      treeMap.put(i+"", i+"");
    }
    time1 = System.currentTimeMillis();
    for (int i = 0; i < count; i++) {
      treeMap.get((random.nextInt(count)+1)+"");
    }
    time2 = System.currentTimeMillis();
    System.out.println("TreeMap time:" +  (time2 - time1));
  }

上述代码的执行结果:

HashMap time:641

LinkedHashMap time:703

TreeMap time:4040

如果读取数据是有序的呢

  @Test
  public void test2() {
    Integer count =1000000;
    Random random =new Random();
    Map<String, String> map = new HashMap<String, String>();
    for (int i = 0; i < count; i++) {
      map.put(i+"", i+"");
    }
    long time1 = System.currentTimeMillis();
    for (int i = 0; i < count; i++) {
      map.get(i+"");
    }
    long time2 = System.currentTimeMillis();
    System.out.println("HashMap time:" + (time2 - time1));
    Map<String, String> linkedMap = new LinkedHashMap<String, String>();
    for (int i = 0; i < count; i++) {
      linkedMap.put(i+"", i+"");
    }
    time1 = System.currentTimeMillis();
    for (int i = 0; i < count; i++) {
       linkedMap.get(i+"");
    }
    time2 = System.currentTimeMillis();
    System.out.println("LinkedHashMap time:" + (time2 - time1));
    Map<String, String> treeMap = new TreeMap<String, String>();
    for (int i = 0; i < count; i++) {
      treeMap.put(i+"", i+"");
    }
    time1 = System.currentTimeMillis();
    for (int i = 0; i < count; i++) {
      treeMap.get(i+"");
    }
    time2 = System.currentTimeMillis();
    System.out.println("TreeMap time:" +  (time2 - time1));
  }

HashMap time:297

LinkedHashMap time:203

TreeMap time:438

 

总结:

读取大量数据的前提下

1、key是随机的情况下获取map的value时的性能表现 HashMap>LinkedHashMap>TreeMap

2、key是有序的情况下获取map的value时的性能表现 LinkedHashMap>HashMap>TreeMap


相关文章
|
2月前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
50 1
|
2月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
78 2
|
2月前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
72 2
|
2月前
|
存储 缓存 安全
HashMap VS TreeMap:谁才是Java Map界的王者?
HashMap VS TreeMap:谁才是Java Map界的王者?
97 2
|
2月前
|
存储 Java API
详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
【10月更文挑战第19天】深入剖析Java Map:不仅是高效存储键值对的数据结构,更是展现设计艺术的典范。本文从基本概念、设计艺术和使用技巧三个方面,详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
68 3
|
2月前
|
存储 缓存 安全
在Java的Map家族中,HashMap和TreeMap各具特色
【10月更文挑战第19天】在Java的Map家族中,HashMap和TreeMap各具特色。HashMap基于哈希表实现,提供O(1)时间复杂度的高效操作,适合性能要求高的场景;TreeMap基于红黑树,提供O(log n)时间复杂度的有序操作,适合需要排序和范围查询的场景。两者在不同需求下各有优势,选择时需根据具体应用场景权衡。
36 2
|
2月前
|
存储 安全 Java
Java Map新玩法:深入探讨HashMap和TreeMap的高级特性
【10月更文挑战第19天】Java Map新玩法:深入探讨HashMap和TreeMap的高级特性,包括初始容量与加载因子的优化、高效的遍历方法、线程安全性处理以及TreeMap的自然排序、自定义排序、范围查询等功能,助你提升代码性能与灵活性。
29 2
|
2月前
|
存储 Java
Map大揭秘:HashMap与TreeMap背后的故事,你听过吗?
Map大揭秘:HashMap与TreeMap背后的故事,你听过吗?
30 1
|
2月前
|
存储 Java
HashMap 与 TreeMap 的差异
【10月更文挑战第14天】总的来说,HashMap 和 TreeMap 各有其特点和适用范围,我们需要根据具体的需求来选择使用哪种数据结构。在实际应用中,还需要考虑性能、内存使用等因素,以确保选择最适合的集合类型。
|
2月前
|
存储 索引
让星星⭐月亮告诉你,HashMap在put数据时是如何找到要存放的位置的?
HashMap 是一种常用的键值对存储结构,其底层采用数组+链表+红黑树实现。本文探讨了 HashMap 在插入键值对时如何确定存放位置。通过分析 `put` 方法的源代码,重点解析了哈希码的计算过程和数组索引的确定方法。哈希码通过 `hashCode()` 方法和位运算优化,确保均匀分布,从而减少哈希碰撞,提高性能。最终,通过 `(n-1) & hash` 计算出数组索引,确保键值对被正确存放到指定位置。
40 2