java - 我如何确定我的类(class)是不可变的

标签 java string hashmap hashcode

我需要创建一个与 String 非常相似的类,但是对象必须存储字节数组而不是存储字符数组,因为我将处理二进制数据,而不是字符串。

我在我的应用程序中使用 HashMap。因此,我热衷于使我的自定义 byteArray 类不可变,因为不可变对象(immutable对象)在 HashMap 中执行更快的搜索。 (我想要这个事实的来源)

我很确定我的类是不可变的,但它在 HashMap 搜索中与字符串相比仍然表现不佳。我如何确定它是不可变的?

最佳答案

最重要的是将字节复制到数组中。如果你有

this.bytes = passedInArray;

调用者可以修改 passedInArray,从而修改 this.bytes。你必须

this.bytes = Arrays.copyOf(passedInArray, passedInArray.length);

(或类似的,克隆也可以)。如果此类主要用作 Maps 中的键,我会立即(在构造函数中)计算哈希码,这比懒惰地计算更简单。

实现明显的 equals(),我想你已经完成了。

关于java - 我如何确定我的类(class)是不可变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21492772/

相关文章:

java - 如何在java中执行图像分割?

java - Spark中如何在不同的worker上运行任务?

java - 将类的对象传递给另一个类

java - 比较两个散列图值与键

java - 通过 IntelliJ Idea 在 Tomcat 中部署外部 war

c - 为什么我的程序陷入无限循环?

python - 如何按字符串拆分列表

将字符串转换为 double

java - HashMap 不同的hashcode 返回不同的值? java

java - java中如何将String转换成Hashmap