Java HashMap<;整数,整数>;vs int[]

Java HashMap<;整数,整数>;vs int[],java,arrays,hashmap,Java,Arrays,Hashmap,我有一个大小为10000的整数数组,它逐渐被其他整数填充(上下文:),但不够大。我计划用HashMap替换它,并且想知道这是否比任意增大数组(例如,将大小增加到100000)更好 另外,HashMap和整数数组之间的主要区别是什么 注意:在这种情况下,HashMap/数组中只使用奇数键。显然,两者都提供了从整数子集到整数的映射。有几个不同之处,但简单的回答是,数组可能更适合密集键,而哈希映射适合稀疏键 对于数组,您使用的每个键的内存开销为32位,但是HashMap的几倍。在该范围内但不使用的每个

我有一个大小为10000的整数数组,它逐渐被其他整数填充(上下文:),但不够大。我计划用HashMap替换它,并且想知道这是否比任意增大数组(例如,将大小增加到100000)更好

另外,HashMap和整数数组之间的主要区别是什么


注意:在这种情况下,HashMap/数组中只使用奇数键。

显然,两者都提供了从整数子集到整数的映射。有几个不同之处,但简单的回答是,数组可能更适合密集键,而哈希映射适合稀疏键

对于数组,您使用的每个键的内存开销为32位,但是HashMap的几倍。在该范围内但不使用的每个键的内存开销对于数组也是32位,但是对于HashMap可能接近于零

阵列访问将比HashMap访问更快

如果您希望使用多达50%的条目,那么使用数组会更好。如果只需要奇数键,数组较大,请考虑使用数组索引<代码>(I-1)/ 2 < /代码>来表示元素的键<代码> i < /代码> ./p> 找到哪一个更适合您的情况的最佳方法,包括找到在它们之间切换的密度阈值,是通过测试。这是我将遵循的程序:

  • 为数据结构定义一个接口,该接口包含您需要能够对其执行的操作的方法
  • 除了实际创建的结构之外,只根据该接口编写代码
  • 定义两个类,每个类实现接口,一个使用数组,另一个使用HashMap
  • 使用每个类进行测量。对于HashMap,您还可以试验HashMap构造函数参数

  • 显然,两者都提供了从整数子集到整数的映射。有几个不同之处,但简单的回答是,数组可能更适合密集键,而哈希映射适合稀疏键

    对于数组,您使用的每个键的内存开销为32位,但是HashMap的几倍。在该范围内但不使用的每个键的内存开销对于数组也是32位,但是对于HashMap可能接近于零

    阵列访问将比HashMap访问更快

    如果您希望使用多达50%的条目,那么使用数组会更好。如果只需要奇数键,数组较大,请考虑使用数组索引<代码>(I-1)/ 2 < /代码>来表示元素的键<代码> i < /代码> ./p> 找到哪一个更适合您的情况的最佳方法,包括找到在它们之间切换的密度阈值,是通过测试。这是我将遵循的程序:

  • 为数据结构定义一个接口,该接口包含您需要能够对其执行的操作的方法
  • 除了实际创建的结构之外,只根据该接口编写代码
  • 定义两个类,每个类实现接口,一个使用数组,另一个使用HashMap
  • 使用每个类进行测量。对于HashMap,您还可以试验HashMap构造函数参数

  • 显然,两者都提供了从整数子集到整数的映射。有几个不同之处,但简单的回答是,数组可能更适合密集键,而哈希映射适合稀疏键

    对于数组,您使用的每个键的内存开销为32位,但是HashMap的几倍。在该范围内但不使用的每个键的内存开销对于数组也是32位,但是对于HashMap可能接近于零

    阵列访问将比HashMap访问更快

    如果您希望使用多达50%的条目,那么使用数组会更好。如果只需要奇数键,数组较大,请考虑使用数组索引<代码>(I-1)/ 2 < /代码>来表示元素的键<代码> i < /代码> ./p> 找到哪一个更适合您的情况的最佳方法,包括找到在它们之间切换的密度阈值,是通过测试。这是我将遵循的程序:

  • 为数据结构定义一个接口,该接口包含您需要能够对其执行的操作的方法
  • 除了实际创建的结构之外,只根据该接口编写代码
  • 定义两个类,每个类实现接口,一个使用数组,另一个使用HashMap
  • 使用每个类进行测量。对于HashMap,您还可以试验HashMap构造函数参数

  • 显然,两者都提供了从整数子集到整数的映射。有几个不同之处,但简单的回答是,数组可能更适合密集键,而哈希映射适合稀疏键

    对于数组,您使用的每个键的内存开销为32位,但是HashMap的几倍。在该范围内但不使用的每个键的内存开销对于数组也是32位,但是对于HashMap可能接近于零

    阵列访问将比HashMap访问更快

    如果您希望使用多达50%的条目,那么使用数组会更好。如果只需要奇数键,数组较大,请考虑使用数组索引<代码>(I-1)/ 2 < /代码>来表示元素的键<代码> i < /代码> ./p> 找到哪一个更适合您的情况的最佳方法,包括找到在它们之间切换的密度阈值,是通过测试。这是我将遵循的程序:

  • 为数据结构定义一个接口,该接口包含您需要能够对其执行的操作的方法
  • 除了实际创建的结构之外,在
    public class Book{}
    
    HashMap<String, Book> books = new HashMap<String, Book>(); // mapping from a string(=key) to a Book object(=value)
    books.put("Harry Potter", new Book());
    // etc.