gpt4 book ai didi

java - HashSet 值计算错误

转载 作者:行者123 更新时间:2023-12-01 15:07:11 25 4
gpt4 key购买 nike

我正在使用 HashSet,它有一些用于所有元素的属性,然后将此 Hashset 添加到每个元素对应的 HashMap 中。此外,还为特定元素(例如 THEAD )添加了一些属性。

但是后来添加的属性align对于Table和THEAD都存在。下面的代码有问题吗?

private static HashMap<String, Set<String>> ELEMENT_ATTRIBUTE_MAP = 
new HashMap<String, Set<String>>();

HashSet<String> tableSet =
new HashSet<String>(Arrays.asList(new String[]
{HTMLAttributeName.style.toString(),
HTMLAttributeName.color.toString(),
HTMLAttributeName.dir.toString(),
HTMLAttributeName.bgColor.toString()}));

ELEMENT_ATTRIBUTE_MAP.put(HTMLElementName.TABLE, new HashSet<String>(tableSet));

// Add align only for Head
tableSet.add(HTMLAttributeName.align.toString());

ELEMENT_ATTRIBUTE_MAP.put(HTMLElementName.THEAD, tableSet);

最佳答案

您的代码应该按您的预期工作。考虑以下(简化的)示例,该示例显示了该行为:

public static void main(String[] args) {
String[] array = new String[] {"a", "b", "c"};
HashSet<String> strings = new HashSet(Arrays.asList(array));

Map<String, Set<String>> map = new HashMap();
Map<String, Set<String>> newMap = new HashMap();
Map<String, Set<String>> cloneMap = new HashMap();

map.put("key", strings);
newMap.put("key", new HashSet(strings));
cloneMap.put("key", (Set<String>) strings.clone());

strings.add("E");

System.out.println(map); //{key=[E, b, c, a]}
System.out.println(newMap); //{key=[b, c, a]}
System.out.println(cloneMap); //{key=[b, c, a]}

}

请注意,Java 变量是对对象的引用,而不是对象本身,因此当您调用 map.put("key", strings) 时它是对底层 HashSet 的引用就这样过去了;因此,当您稍后更新 HashSetHashMap也更新了。

关于java - HashSet 值计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12816527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com