当前位置: 首页 > 知识库问答 >
问题:

在实例化Map[重复]时,使用包装类作为键和值

严宇
2023-03-14

在实例化地图时,我有一个关于一些语义的问题。具体来说,我应该在分配键和值类型时使用包装器类,还是可以使用基元类型?

示例:

Map<int, String> map = new TreeMap<int, String>();

Map<Integer, String> map = new TreeMap<Integer, String>();

示例:

Map<int[], String> map = new TreeMap<int[], String>();

Map<Integer[], String> map = new TreeMap<Integer[], String>();

这两个实例在约定和意义上有什么区别吗?我知道在读取或写入对象时,使用基元类型会调用自动装箱。

共有3个答案

盛柏
2023-03-14

原语不能在泛型中使用。因此,您必须使用包装类型

但是使用基元数组是可以的,因为Java数组总是对象

如果你想使用原语,那么看看Valhalla项目。它希望清除java中的大量垃圾,并实现值类型(类似于原语

桓喜
2023-03-14

映射不允许将原语键入为int[]之所以有效,是因为根据Java文档array是一个对象。

如果要将自定义对象用作键/值,则应该使该类不可变,或者必须重写hashCode()equals()方法。

贾越
2023-03-14

不能在泛型类型规范(如Map)中使用基元类型

数组是一个不同的问题。原始数组实际上是对象,因此您可以在通用规范中使用它们。但是,数组不会覆盖equals(Object)hashCode()方法(无论它们是基元还是对象的数组),这使得它们对于map键来说是一个非常糟糕的选择。

 类似资料:
  • 问题内容: 我在某处读到,使用如下所示的类实例不是一个好主意,因为它们可能会导致内存泄漏。有人可以告诉我这是否是有效的声明?还是他们用这种方式有问题吗? 问题答案: 是的,您必须要小心!例如,如果您的代码在Web容器中运行,并且习惯于热部署Web应用程序,则对单个类对象的保留引用可能会导致大量Permgen内存泄漏。 本文详细解释了该问题。简而言之,问题在于每个类都包含对其类加载器的引用,而每个类

  • 可能的重复: 确定对象是否为基元类型 这可能听起来很愚蠢,但请原谅我,我在用愚蠢的代码工作。给定一个对象集合,最好的方法是什么来识别哪些是原语,或者更准确地说,是原语周围的包装。 除了逐个枚举所有原语之外,这可能吗?

  • 介绍 有时候我们需要键值对一一对应,但是又有可能有重复的键,也可能有重复的值,就像一个2列的表格一样: 键 值 key1 value1 key2 value2 因此,Hutool创建了TableMap这类数据结构,通过键值单独建立List方式,使键值对一一对应,实现正向和反向两种查找。 当然,这种Map无论是正向还是反向,都是遍历列表查找过程,相比标准的HashMap要慢,数据越多越慢。 使用 T

  • 整数包装类 我无法理解这种输出是如何形成的。我想了解这个整数中的“1000”是如何转换成字节中的“-24”的。我想知道这背后的逻辑。

  • 我希望将变量插入到对象键结构中,但我只得到变量名,而不是变量值。

  • 我知道和之间的区别,它们分别针对元素和元素的迭代器。 我什么时候应该用哪个?如果开销是相似的,为什么我要使用,因为更容易编写?