我正在尝试用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
而不是e
或entry
而不是i
(。 -
忽略
if
、else
-for
-, ...机构。