Java 使用ArrayList实现集合
我很难使用arrayList实现集合。 我不想使用哈希集。我想请一个人解释一下为什么它不起作用 set.java:Java 使用ArrayList实现集合,java,collections,Java,Collections,我很难使用arrayList实现集合。 我不想使用哈希集。我想请一个人解释一下为什么它不起作用 set.java: public class set<E> { Set <E> setList; ArrayList<E> elementList; public set(){ this.setList = (Set<E>) new ArrayList(); } public set(E[]
public class set<E> {
Set <E> setList;
ArrayList<E> elementList;
public set(){
this.setList = (Set<E>) new ArrayList();
}
public set(E[] inputArray){
super();
for(E element: inputArray)
setList.add( element);
}
我得到一个错误:
java.util.ArrayList cannot be cast to java.util.Set
您不能将
ArrayList
强制转换为Set
,它们在继承树中处于同一级别(就像兄弟一样),不确定您试图通过此实现什么
如果要从ArrayList
中创建HashSet
,请使用构造函数
new HashSet<SomeType>(arrayListInstance);
newhashset(arrayListInstance);
正如@nacho所提到的,您将需要实现Set
接口,并为您的实现命名一些有意义的全名(例如ListBackedSet
或ArraySet
)
如果要创建由
ArrayList
支持的Set的新实现,则需要保留唯一性属性,为此,必须自定义add()
、addAll()
和构造函数以避免重复您不能将ArrayList
强制转换为Set
,他们在继承树中处于同一级别(就像兄弟一样),不确定您试图通过此实现什么
如果要从ArrayList
中创建HashSet
,请使用构造函数
new HashSet<SomeType>(arrayListInstance);
newhashset(arrayListInstance);
正如@nacho所提到的,您将需要实现Set
接口,并为您的实现命名一些有意义的全名(例如ListBackedSet
或ArraySet
)
如果要创建由
ArrayList
支持的Set的新实现,则需要保留唯一性属性,为此,您必须自定义add()
、addAll()
和构造函数以避免重复您尝试将ArrayList
强制转换为Set
。这会产生异常。
排队
this.setList=(Set)new ArrayList();
您正试图将ArrayList
强制转换为Set
。这会产生异常。
排队
this.setList=(Set)new ArrayList();
实际上,您正在导入java.util.Set
,而您的类正在调用Set
这不是一个好的做法,会导致混淆(并且您没有遵循java代码约定)。但是ArrayList没有实现Set
接口,这就是为什么会出现错误的原因。您还需要使用以下命令指定您的E:Set aSet=new Set(a)。不要使用原始类型。实际上,您正在导入java.util.Set
,而您的类正在调用Set
,这不是一个好的做法,会导致混乱(并且您没有遵循java代码约定)。但是ArrayList没有实现Set
接口,这就是为什么会出现错误的原因。您还需要使用以下命令指定您的E:Set aSet=new Set(a)。不要使用原始类型。实际上,OP说他不想使用HashSet
,但提到他需要implements Set
接口或扩展一些AbstractSet
来进行自己的实现也不错。一个也叫它set
的名字会引起混淆,而且这个名字甚至遵循java代码惯例。实际上,OP说他不想使用HashSet
,但提到他需要实现set
接口或扩展一些抽象集来实现自己的实现也不错。一个也叫它set
的名字会导致混淆,而且这个名字甚至遵循java代码惯例。
this.setList = (Set<E>) new ArrayList();