java - 如何在对象中存储 Set/HashSet?

标签 java object set hashset

 public HashSet<String> Red;
 public HashSet<String> Blue;
 public HashSet<String> Colors;

public Data(HashSet<String> red, HashSet<String> blue, HashSet<String> colors) {
  Red = red;
  Blue = blue;
  Colors = colors;
}

我尝试在此对象内存储 3 个 Set/HashSet。这种方式是否正确,我可以像普通的那样访问 Set/HashSet 对象吗:

public Set<String> Red = new HashSet<String>();

最佳答案

如果您询问如何访问 Data 对象内的 HashMap

要访问三个 HashSet 之一,您需要创建一个新的 Data 对象,并在 Data 对象初始化后访问所选的公共(public)字段:

HashSet<String> setOne = new HashSet<String>();
HashSet<String> setTwo = new HashSet<String>();
HashSet<String> setThree = new HashSet<String>();

Data d = new Data(setOne, setTwo, setThree);
d.Blue.add("this will be added to setTwo");

但是,通常情况下,您不希望拥有公共(public)字段,而是将它们设为私有(private)并提供 getter/setter 方法,因为这将提供 encapsulation .

如果您询问是否应该引用接口(interface)或类

首先:HashSet 是一个具体类,Set 是一个接口(interface)。 另外:引用类型决定了可以对对象调用哪些方法。 (这将是等号的左侧,而右侧是动态类型)。

在构造函数中,您希望尽可能不具体。 如果您没有使用 HashSet 类的任何特殊功能,您应该倾向于引用 Set 接口(interface),因为如果您想稍后更改 Data 类的实现,这会更加灵活 - 它还使您的类的用户可以这样做使用每个实现 Set 的类,而不是限制使用 HashSet。

但是,如果您需要特定类的特殊功能,您当然会引用该类。

关于java - 如何在对象中存储 Set/HashSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13157469/

相关文章:

java - Spring EL (SpEL) 代码执行

java - 关于 JCS 的信息

java - 在lucene中获取精确的短语索引

c++ - 如何让对象在 vector 中老化?

转换为枚举集的 Java 不可修改集

Haskell 合格导入(创建空集)

java - 为什么默认情况下 Java 中的变量不是 volatile 的?

javascript - 在 Three.js 中动态地将一个网格替换为另一个新网格

class - 设置 Racket 中定义的同一类的另一个对象实例的私有(private)字段

python 集合包含与列表包含