Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中两个列表之间的关系_Java - Fatal编程技术网

Java中两个列表之间的关系

Java中两个列表之间的关系,java,Java,我有两组不同类型的对象。一个集合中的每个元素都与另一个集合中的一个元素相关,并且这两个列表位于两个不同的类中 我有一个函数,它在一个集合上迭代并检查是否必须删除这个元素,当它删除时,我必须删除另一个集合中的关联元素 我必须使用什么样的集合和方法来实现这一点?所描述的操作听起来非常适合在Java中使用集合(而不是列表)。例如: // s1 contains the set {1, 4, 5, 3} Set<Integer> s1 = new HashSet<Integer>

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

我有一个函数,它在一个集合上迭代并检查是否必须删除这个元素,当它删除时,我必须删除另一个集合中的关联元素


我必须使用什么样的集合和方法来实现这一点?

所描述的操作听起来非常适合在Java中使用
集合
(而不是
列表
)。例如:

// 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]
如果无法进行简单转换,则计划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);
}
Set s1=new HashSet();
s1.加入(1);s1.加入(4);s1.加入(5);s1.加入(3);
Set s2=新的HashSet();
s2.添加(“1”);s2.添加(“2”);s2.添加(“3”);
//将等价项从一个集合映射到另一个集合
Map Map=newhashmap();
地图.放(1,1);;
地图放置(“2”,2);
地图放置(“3”,3);
for(字符串s:s2){
//查找“关联元素”
整数n=map.get(s);
如果(s1.包含(n))
s1.移除(n);
}

如果您不担心性能问题,请使用
Set
提供的解决方案。请记住,它具有时间复杂性

如评论中所述,有一种方法可以使用
Map
实现,它将为您提供
Om
解决方案(取决于它的实现方式)

类关系{
最终to1;
最终Vo1;
公共关系(o1、o2){
这1.o1=o1;
这是0.o2=o2;
}
}
地图关系=新地图;
//创建关系将其添加到映射中,而不是添加到列表中
关系。put(“id12”,新关系(o1,o2));
关系。put(“id34”,新关系(o3,o4));
// ...
//迭代“关系”,必要时删除。

听起来你应该使用一个映射而不是两个列表?如果第一个集合的元素是可散列的,那么
散列映射将允许你删除同构的位。我需要两个列表,因为每个列表在不同的类中。我将编辑我的问题,说明这一点
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);
}
class Relationship<T, V> {
    final T o1;
    final V o1;

    public Relationship(o1, o2) {
        this.o1 = o1;
        this.o2 = o2;
    }
}

Map<String, Relationship> relationship = new Map<>;

// create the relationships add it to the Map instead to a List
relations.put("id12", new Relationship(o1, o2));
relations.put("id34", new Relationship(o3, o4));

// ...

// iterate over `relationships` and remove if its necessary.