Java 使用ArrayList实现集合

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[]

我很难使用arrayList实现集合。 我不想使用哈希集。我想请一个人解释一下为什么它不起作用

set.java:

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();