当前位置:编程学习 > JAVA >>

求两个List的交集

两个List,自身无重复,求它们的交集,要求效率高 --------------------编程问答-------------------- 看来没有简单方法啊 --------------------编程问答-------------------- list1.retainAll(list2); --------------------编程问答-------------------- 你看这个可以吗?
package com.sgcc.test;

import java.util.ArrayList;
import java.util.List;


public class Test1 {

public static void main(String[] args) {
List list1 = new ArrayList<Node>();
list1.add(new Node("001","name1"));
list1.add(new Node("002","name2"));
list1.add(new Node("003","name3"));
list1.add(new Node("004","name4"));
List list2 = new ArrayList<Node>();
list2.add(new Node("001","name1"));
list2.add(new Node("005","name5"));
list2.add(new Node("003","name3"));
list2.add(new Node("007","name7"));
jisuan(list1,list2);
}

private static void jisuan(List list1, List list2) {
List list = new ArrayList<Node>();
for (int i = 0; i < list1.size(); i++) {
Node node1 = (Node) list1.get(i);
String id1 = node1.getId();
String name1 = node1.getName();
for2: for (int j = 0; j < list2.size(); j++) {
Node node2 = (Node) list2.get(j);
String id2 = node2.getId();
String name2 = node2.getName();
if(id1.equals(id2)&&name1.equals(name2)){
list.add(node2);
list2.remove(j);
break for2;
}
}
}

for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).toString());
}
}
}


package com.sgcc.test;

public class Node {
private String id;
private String name;

public Node() {
super();
// TODO Auto-generated constructor stub
}

public Node(String id, String name) {
super();
this.id = id;
this.name = name;
}



public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "Node [id=" + id + ", name=" + name + "]";
}
}
--------------------编程问答-------------------- list.retainAll(list2); // list 中的就是交集了   --------------------编程问答-------------------- retainAll
public boolean retainAll(Collection<?> c)仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。换句话说,移除此 collection 中未包含在指定 collection 中的所有元素。 
此实现在此 collection 上进行迭代,依次检查该迭代器返回的每个元素,以查看其是否包含在指定的 collection 中。如果不是,则使用迭代器的 remove 方法将其从此 collection 中移除。 

注意,如果 iterator 方法返回的迭代器无法实现 remove 方法,并且此 collection 包含一个或多个在指定 collection 中不存在的元素,那么此实现将抛出 UnsupportedOperationException。 

指定者:
接口 Collection<E> 中的 retainAll
参数:
c - 包含保留在此 collection 中的元素的 collection 
返回:
如果此 collection 由于调用而发生更改,则返回 true 
--------------------编程问答-------------------- 自生无重复,那必须是 Set 啊,Set合并就简单了。 --------------------编程问答--------------------
引用 6 楼 u012852259 的回复:
自生无重复,那必须是 Set 啊,Set合并就简单了。

说错了,求交集是判断存在就简单。O(1)消耗
补充:Java ,  Java相关
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,