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

时间:2012-10-31 12:01:38

标签: 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;
}

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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");

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

如果您询问是否应该参考界面或类

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

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

然而,您是否需要特定类的特殊功能,您当然会引用该类。

答案 1 :(得分:0)

如果我理解正确,您是否在询问Set<String> Red = new HashSet<String>()HashSet<String> Red = new HashSet<String>()是否允许表格?