在实例化地图时,我有一个关于一些语义的问题。具体来说,我应该在分配键和值类型时使用包装器类,还是可以使用基元类型?
示例:
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>();
这两个实例在约定和意义上有什么区别吗?我知道在读取或写入对象时,使用基元类型会调用自动装箱。
原语
不能在泛型中使用。因此,您必须使用包装类型
。
但是使用基元数组是可以的,因为Java数组总是对象
。
如果你想使用原语,那么看看Valhalla项目。它希望清除java中的大量垃圾,并实现值类型
(类似于原语
)
映射不允许将原语
键入为键
或值
int[]
之所以有效,是因为根据Java文档array
是一个对象。
如果要将自定义对象用作
键/值
,则应该使该类不可变,或者必须重写hashCode()
和equals()
方法。
不能在泛型类型规范(如Map)中使用基元类型
数组是一个不同的问题。原始数组实际上是对象,因此您可以在通用规范中使用它们。但是,数组不会覆盖
equals(Object)
和hashCode()
方法(无论它们是基元还是对象的数组),这使得它们对于map键来说是一个非常糟糕的选择。
问题内容: 我在某处读到,使用如下所示的类实例不是一个好主意,因为它们可能会导致内存泄漏。有人可以告诉我这是否是有效的声明?还是他们用这种方式有问题吗? 问题答案: 是的,您必须要小心!例如,如果您的代码在Web容器中运行,并且习惯于热部署Web应用程序,则对单个类对象的保留引用可能会导致大量Permgen内存泄漏。 本文详细解释了该问题。简而言之,问题在于每个类都包含对其类加载器的引用,而每个类
可能的重复: 确定对象是否为基元类型 这可能听起来很愚蠢,但请原谅我,我在用愚蠢的代码工作。给定一个对象集合,最好的方法是什么来识别哪些是原语,或者更准确地说,是原语周围的包装。 除了逐个枚举所有原语之外,这可能吗?
介绍 有时候我们需要键值对一一对应,但是又有可能有重复的键,也可能有重复的值,就像一个2列的表格一样: 键 值 key1 value1 key2 value2 因此,Hutool创建了TableMap这类数据结构,通过键值单独建立List方式,使键值对一一对应,实现正向和反向两种查找。 当然,这种Map无论是正向还是反向,都是遍历列表查找过程,相比标准的HashMap要慢,数据越多越慢。 使用 T
整数包装类 我无法理解这种输出是如何形成的。我想了解这个整数中的“1000”是如何转换成字节中的“-24”的。我想知道这背后的逻辑。
我希望将变量插入到对象键结构中,但我只得到变量名,而不是变量值。
我知道和之间的区别,它们分别针对元素和元素的迭代器。 我什么时候应该用哪个?如果开销是相似的,为什么我要使用,因为更容易编写?