`

关于一个大map和多个小map的性能对比

阅读更多
话不多说,看结果  10万条数据,两种方法基本上差不多

单位毫秒
录入时间为:2226
查找时间为:22
-----
录入时间为432
查找时间为:13

import java.util.*;

public class MapTest2 {

public static void main(String ags[]) {
test2();
System.out.println("-----");
test1();
}

public static void test1() {
Map m = new HashMap(100000);
long t0 = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
m.put("aa.bb.to.pub." + i + "12345asfsdfVO", "value");
}
long t1 = System.currentTimeMillis();
System.out.println(t1 - t0);

//随机取出1000个数字
for (int i = 0; i < 10000; i++) {
int j = new Random(10000).nextInt();
m.get("aa.bb.to.pub." + j + "12345asfsdfVO");
}
long t2 = System.currentTimeMillis();
System.out.println(t2 - t1);

}

public static void test2() {
Map m = new HashMap(10);
m.put("aa.bb.ao", new HashMap(10000));
m.put("aa.bb.bo", new HashMap(10000));
m.put("aa.bb.co", new HashMap(10000));
m.put("aa.bb.do", new HashMap(10000));
m.put("aa.bb.eo", new HashMap(10000));
m.put("aa.bb.fo", new HashMap(10000));
m.put("aa.bb.go", new HashMap(10000));
m.put("aa.bb.ho", new HashMap(10000));
m.put("aa.bb.io", new HashMap(10000));
m.put("aa.bb.jo", new HashMap(10000));
long t0 = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {

for (int j = 0; j < 10000; j++){
// 每个模块里有1000个
((Map) m.get("aa.bb.ao")).put("aa.bb.to.pub." + j+ "12345asfsdfVO", "value");
((Map) m.get("aa.bb.bo")).put("aa.bb.to.pub." + j+ "12345asfsdfVO", "value");
((Map) m.get("aa.bb.co")).put("aa.bb.to.pub." + j+ "12345asfsdfVO", "value");
((Map) m.get("aa.bb.do")).put("aa.bb.to.pub." + j+ "12345asfsdfVO", "value");
((Map) m.get("aa.bb.eo")).put("aa.bb.to.pub." + j+ "12345asfsdfVO", "value");
((Map) m.get("aa.bb.fo")).put("aa.bb.to.pub." + j+ "12345asfsdfVO", "value");
((Map) m.get("aa.bb.go")).put("aa.bb.to.pub." + j+ "12345asfsdfVO", "value");
((Map) m.get("aa.bb.ho")).put("aa.bb.to.pub." + j+ "12345asfsdfVO", "value");
((Map) m.get("aa.bb.io")).put("aa.bb.to.pub." + j+ "12345asfsdfVO", "value");
((Map) m.get("aa.bb.jo")).put("aa.bb.to.pub." + j+ "12345asfsdfVO", "value");
}
}
long t1 = System.currentTimeMillis();
System.out.println("录入时间为:" + (t1 - t0));;
// System.out.println(m.get("8888key"));
for (int i = 1; i < 10000; i++) {
int j = new Random(10000).nextInt();
((Map) m.get("aa.bb.ao")).get("aa.bb.to.pub." + j+ "12345asfsdfVO");
}
long t2 = System.currentTimeMillis();
System.out.println("查找时间为:" + (t2 - t1));

}


}


分享到:
评论

相关推荐

    Java里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)

    - **特性**:ConcurrentSkipListMap支持并发操作,多个线程可以同时进行插入、删除和查找,保证线程安全。 - **性能分析**:在多线程环境下,ConcurrentSkipListMap表现出色,特别是在查找大量有序数据时,如使用...

    Map拆分List拆分

    例如,在Hadoop MapReduce中,InputFormat类负责将输入数据拆分为多个Map任务,每个任务处理一部分键值对。 接下来,List拆分与Map拆分类似,但更专注于有序或无序元素的序列。List通常包含一组元素,这些元素可以...

    C#Map映射各个方式性能大比拼

    在C#编程中,映射(Map)通常指的是对象之间的转换或复制过程,尤其是在需要创建一个新对象作为已有对象副本时。本篇文章将探讨几种不同的C#对象复制方法,并进行性能对比,帮助开发者选择最合适的策略。以下是所...

    关于map的 一个key对应多个value

    NULL 博文链接:https://zzcjobstudy.iteye.com/blog/2066185

    微信小程序—map地图实现标记多个位置(导入即可用)

    `markers`属性用于存放标记的位置信息,它是一个包含多个对象的数组,每个对象至少包含`id`、`longitude`和`latitude`三个属性,分别表示标记的唯一标识、经度和纬度。 在`index.js`文件中,我们需要初始化地图的...

    map中字符串与结构体作key效率比较

    2. **结构体作为键**:自定义结构体可以包含任意类型的成员,如果结构体作为`map`的键,我们需要提供一个比较函数对象或者重载`运算符来确定键的排序规则。结构体的比较通常是通过对成员逐个进行比较来完成的。使用...

    利用STL中的MAP和VECTOR实现的一个多节点树

    在这个特定的场景中,我们利用STL中的`map`和`vector`来实现一个多节点树的数据结构。`map`通常用于存储键值对,而`vector`则是一个动态数组,可以方便地添加、删除和访问元素。下面将详细解释如何利用这两个容器...

    swift-LinkMap解析工具检查每个类占用大小

    LinkMap是一个编译时生成的文件,包含了关于二进制文件的详细信息,包括符号表、代码和数据的地址等。通过解析这个文件,我们可以获取到Swift类的大小信息。 首先,让我们详细了解一下LinkMap文件。当Xcode构建一个...

    GameMap_地图_gamemap_gamemap官网_分割地图_gamemap下_

    GameMap是一个专门用于创建、编辑和管理游戏地图的软件或服务,它可能由gamemap官网提供,为开发者提供了丰富的地图设计功能。在游戏设计领域,一个精心设计的地图能够极大地提升玩家的游戏体验,无论是开放世界还是...

    详解Go开发Struct转换成map两种方式比较

    首先,我们定义了一个Persion结构体,其中包含了多个字段,这些字段的类型为int、string、bool等基本类型,这样的结构体类型是Go语言中常见的一种数据结构。 ```go type Persion struct { Id int Name string ...

    Map (c++实现的简易map)

    自定义`Map`的一个挑战是实现高效的查找、插入和删除操作,这通常需要熟练掌握二叉搜索树的特性,尤其是红黑树的插入和旋转规则。此外,为了保证`Map`的线程安全,可能还需要考虑多线程环境下的同步机制,如互斥锁...

    map.zip_电机_电机MAP_电机效率_电机效率map_绘制电机MAP

    总的来说,电机效率MAP的绘制是一个结合了物理原理、数据处理和可视化技术的过程,对于理解和优化电机性能具有深远的影响。"map.zip"提供的工具或许能简化这一过程,使得非专业用户也能方便地分析电机的效率特性。

    map和set的异同

    综上所述,虽然`map`和`set`在很多方面有共同之处,如基于红黑树的实现和有序性等,但它们在数据类型、插入规则、访问方式等方面存在明显差异。理解这些不同有助于开发者根据实际需求选择最合适的容器类型,提高程序...

    嵌套Map或者List获取key、value值

    当一个Map的值本身又是一个Map时,我们就说这个Map是嵌套的。例如,我们可以有一个用户信息的Map,其中键是用户ID,而对应的值是一个包含用户名、邮箱等信息的另一个Map。 ```java Map, Map, String&gt;&gt; users = new ...

    c++中map的基本用法和嵌套用法实例分析

    C++中的`map`是一个关联容器,它存储键值对,其中每个键都是唯一的。`map`的数据结构通常实现为红黑树,提供了O(log n)的时间复杂度进行插入、查找和删除操作。下面我们将详细探讨`map`的基本用法和嵌套用法。 ### ...

    素材_tilemap素材_使用TileMap快速构造2D关卡_

    - 层次管理:在TileMap中,可以设置多个层,比如背景层、地面层、物体层等,便于分层次处理。 - 对象图层:除了基本的瓷砖,还可以添加对象图层,放置可交互的游戏对象,如敌人、道具、开关等。 - 事件触发:结合...

    多线程map容器互斥代码

    它的核心目标是展示如何在多线程环境中使用互斥量(Mutex)来保护共享资源——一个名为`mapdate`的`map`容器。`map`容器在C++中用于存储键值对,它提供了关联数组的功能。 在这个程序中,有两个线程:主线程和删除...

    查询返回Map

    查询结果通常是多个行,每一行可以映射为一个Map,键可能是数据库字段名,值则是对应字段的值。 例如,使用JDBC的代码可能如下: ```java List&lt;Map, Object&gt;&gt; result = jdbcTemplate.queryForList("SELECT * FROM ...

    电机map图绘制

    电机Map图绘制是电机设计与分析中的一个重要环节,它能够直观地展示电机在不同工作条件下的性能特性。Map图通常包括效率地图(Efficiency Map)和功率地图(Power Map),帮助工程师了解电机在不同转速和负载下的...

    C++中map容器的说明和使用技巧

    C++中map容器提供一个键值对容器,map与multimap的差别仅仅在于multiple允许一个键对应多个值。map容器的使用技巧包括插入数据、查找数据和修改数据、删除数据、迭代数据等。 一、map容器的说明 map容器是一个关联...

Global site tag (gtag.js) - Google Analytics