【发布时间】:2021-09-22 08:45:31
【问题描述】:
必须在一个类中定义一个 HashSet,而我需要从其他类访问这个 HashSet 并向其中添加数据。但是,它并不容易,因为每次 HashSet 都好像被重置,当我添加一个新元素时,旧元素就消失了。
输出:
[]
[[sdadsa, fafafsa, ghfhgf, kjhkjh]]
[[], [sdadsa, fafafsa, ghfhgf, kjhkjh]]
头等舱:
public class listaKlasa {
protected static Set<ArrayList<String>> unikatna = new HashSet<ArrayList<String>>();
public static void setUnikatna(ArrayList<String> ista) {
unikatna.add(ista);
}
public static Set<ArrayList<String>> getUnikatna() {
return unikatna;
}
}
二等:
public class novitest {
public static void main(String[] args) {
System.out.println(listaKlasa.getUnikatna());
ArrayList<String> li = new ArrayList<>();
li.add("sdadsa");
li.add("fafafsa");
ArrayList<String> la = new ArrayList<>();
li.add("ghfhgf");
li.add("kjhkjh");
listaKlasa.setUnikatna(li);
System.out.println(listaKlasa.getUnikatna());
listaKlasa.setUnikatna(la);
System.out.println(listaKlasa.getUnikatna());
}
}
【问题讨论】:
-
我在您提供的输出中看不到任何意外行为。您正在向集合中添加 1 个空列表和 1 个包含 4 个元素的列表,这就是它打印出来的内容。也许你自己弄糊涂了,因为你给你的 ArrayList 提供了非常糟糕的变量名,因此似乎混淆了
la和li(你只是添加到li,la保持为空) -
这可能会出错,因为您在某处修改了
ArrayList,而它存储在HashSet中。这将使ArrayList的哈希码在集合中发生变化,从而混淆集合。 -
顺便说一句,你应该遵循Java命名约定:变量名和方法名用camelCase写,类名用PascalCase写。
-
我同意 OH GOD SPIDERS 的观点,当前形式的输出是我期望的输出。
li包含 4 个元素,而la在将它们添加到Set时包含 0 个元素。