我有两套A和B.我必须找到联合,交集和差异。现在我专注于交集方法,我正在尝试实现retainAll()方法。
我不会包含我的所有代码,只包括与我想要完成的内容相关的方法和数据字段。
我的问题在于试图找到交集。出于某种原因,当我进行测试时,我得到一个空列表。我只在输出屏幕上显示空括号。我无法弄清楚为什么会发生这种情况,但我觉得它与构造函数或我如何设置retainAll方法有关。注意:这只发生在交集方法中,union方法完美地运行
感谢您的任何意见,我非常感谢
public class Set<T> {
//data fields
private LinkedList<T> L = new LinkedList<T>();
private int size;
//constructor Set with argument used in intersection method
public Set(Set<T> b) {
}
public void add(T item){
L.add(item);
size ++;
}
// will remove first instance of specified item
public void remove(T item){
L.remove(item);
size--;
}
public void retainAll(Set<T> x){
L.retainAll(L);
}
public String toString(){
return L.toString();
}
public Iterator<T> iterator(){
return L.iterator();
}
public static <T> HashSet<T> union(Set<T> a, Set<T>b){
//create new set c, which will be the combination of A and B
HashSet<T> c = new HashSet<T>();
Iterator<T> iter1 = a.iterator();
Iterator<T> iter2 = b.iterator();
//go through set A, add to new union
while(iter1.hasNext()){
c.add(iter1.next());
}
//go through set B, add to new union
while(iter2.hasNext()){
c.add(iter2.next());
}
return c;
public static <T> Set<T> intersection(Set<T> a, Set<T>b){
//create new set intersection, which will contain common items of set A and B
Set<T> c = new Set<T>(a);
c.retainAll(b);
return c;
答案 0 :(得分:0)
Set<T> c = new Set<T>();
c.retainAll(b);
return c;
c
永远不会有a
的任何元素。事实上,您从未在该代码块中的任何位置提到a
。也许你的意思是
Set<T> c = new Set<T>(a);
答案 1 :(得分:0)
// constructor使用交集方法
中使用的参数进行设置public Set(Set<T> b) {
}
在上面的构造函数中,您需要编写用于将一个元素的元素复制到另一个元素中的代码,因为构造函数什么都不做。它只是采取了集合论证。
public static <T> Set<T> intersection(Set<T> a, Set<T>b){
//create new set intersection, which will contain common items of set A and B
Set<T> c = new Set<T>(a);
c.retainAll(b);
return c;
在上面的方法中,当它没有将“a”的元素复制到“c”时,retainsAll方法将仅返回空。
PS:请对构造函数执行某些操作。