gpt4 book ai didi

java - Java中两个列表之间的关系

转载 作者:行者123 更新时间:2023-11-30 09:05:48 25 4
gpt4 key购买 nike

我有两组不同类型的对象。一个集合中的每个元素都与另一个集合中的一个元素相关,并且这两个列表属于两个不同的类。

我有一个函数可以遍历一组并检查是否必须删除此元素,如果删除,我必须删除另一组中的关联元素。

我必须使用什么样的收集和方法来做到这一点?

最佳答案

所描述的操作听起来很适合在 Java 中使用 Set(而不是 List)。例如:

// s1 contains the set {1, 4, 5, 3}
Set<Integer> s1 = new HashSet<Integer>();
s1.add(1); s1.add(4); s1.add(5); s1.add(3);

// s2 contains the set {1, 2, 3}
Set<Integer> s2 = new HashSet<Integer>();
s2.add(1); s2.add(2); s2.add(3);

// perform the difference between s1 and s2
s1.removeAll(s2);

// now s1 contains the set {4, 5}
System.out.println(s1);
=> [4, 5]

更新

如果两个集合都包含不同类型的元素,那么您必须设计一种方法将一种类型转换为另一种类型,或者如您在问题中所说:找到“另一个集合中的关联元素”。这可以是一个直接的转换,也可以是一个 Map 以这样一种方式保存关系,即给定第一个集合的元素,您可以快速从第二个集合中获取相应的元素。例如,如果转换就足够了:

Set<Integer> s1 = new HashSet<Integer>();
s1.add(1); s1.add(4); s1.add(5); s1.add(3);

Set<String> s2 = new HashSet<String>();
s2.add("1"); s2.add("2"); s2.add("3");

for (String s : s2) {
// find "associated element"
Integer n = Integer.valueOf(s);
if (s1.contains(n))
s1.remove(n);
}

如果无法进行简单的转换,则方案 B 是定义元素之间的映射:

Set<Integer> s1 = new HashSet<Integer>();
s1.add(1); s1.add(4); s1.add(5); s1.add(3);

Set<String> s2 = new HashSet<String>();
s2.add("1"); s2.add("2"); s2.add("3");

// map the equivalences from one set into the other
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("1", 1);
map.put("2", 2);
map.put("3", 3);

for (String s : s2) {
// find "associated element"
Integer n = map.get(s);
if (s1.contains(n))
s1.remove(n);
}

关于java - Java中两个列表之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24728324/

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