集合实现中的 addAll() 方法不起作用



我正在尝试用Java中的ArrayList实现我自己的Set。我已经编写了方法add(),它负责在 Set 中添加一个新元素,方法contains,如果在 Set 中找到一个元素,则返回 true,并且方法addAll,我想添加参数中的集合包含在 Set 中的所有元素。尽管如此,当我创建类 Set 的两个对象并在 上调用该方法时,我在 Eclipse 上收到一条错误消息,说:The method addAll(Collection) in the type Set is not applicable for the arguments Set。这是我到目前为止为实现编写的代码:

import java.util.ArrayList;
import java.util.Collection;
public class Set<E>{
private ArrayList<E> List = new ArrayList<>();
public boolean add(E e) {
if(contains(e))
return false;
return List.add(e);
}
public boolean addAll(Collection<E> e) {
for(E i : e)
{
if(!List.contains(i)) {
List.add(i);
}   
}
return true;
}
public boolean contains(E e) {
return List.contains(e);
}

这是我从中实例化对象的类以及我在它们上调用的方法:

public class NewClass
{   
private Set setOne;
private Set setTwo;
public static void main(String[] args) { 
setOne.addAll(setTwo);
}

有人可以帮助我了解我做错了什么吗?提前致谢

您的Set没有实现java.util.Collection接口。因此,您的Set不是Collection.

Collection接口需要相当多的方法来实现,但是如果您Set<E> implements Collection<E>并实现所有必需的方法,则代码将起作用。

作为快速和肮脏的修复,您可以将方法public boolean addAll(Set<? extends E> set)添加到您的Set中。

关于您的代码的一些注释:

  • 按照 PECS 助记符,您可能希望将现有addAll(...)方法的签名更改为:

    public boolean addAll(Collection<? extends E> e)
    
  • 在 Java 中,变量名、属性名和方法名应以小写字母 (private ArrayList<E> List = new ArrayList<>();->private ArrayList<E> list = new ArrayList<>();( 开头。

  • 您应该为变量和参数提供有意义的名称(例如collection而不是eentry而不是i(。

  • 忽略ifelse-for-, ...机构。

最新更新