将Arraylist转换为集

时间:2016-01-11 19:32:19

标签: java arraylist set

我编写了以下方法将我的Arraylist转换为集合:

public static Set<Animal> toSet(){
    Set<Animal> aniSet = new HashSet<Animal>(animals);
    return aniSet;
}

我想这样做:

public static Set<Animal> toSet(){
    return HashSet<Animal>(animals);
}

为什么我收到一条错误消息,指出它无法找到变量HashSet?我是否需要先存储变量?

编辑:必须在我的Hashset之前添加新内容。编码让我感到愚蠢:&#39;)

1 个答案:

答案 0 :(得分:3)

此代码存在两个问题:

  1. 你忘了animals必须来自某个地方;我不认为第一个例子是编译的;和
  2. 您在创建新new时忘记使用HashSet<Animal>
  3. 这可能是预期的行为:

    public static <T> Set<T> toSet(Collection<? extends T> data){
        return new HashSet<T>(data);
    }
    

    然后你可以用:

    来调用它
    ArrayList<Animal> animals = new ArrayList<>();
    //do something with the animals list
    //...
    
    Set<Animal> theSet = Foo.<Animal>toSet(animals);
    

    通过使用通用静态方法,您可以使用您喜欢的任何类型调用它。使用Collection<? extends T>,您不仅限于ArrayList<T>,而是可以使用任何类型CollectionLinkedListHashSetTreeSet ,...)。最后,该集合的类型甚至不必是动物。您可以将ArrayList<Cat>转换为HashSet<Animal>

    但请注意,此方法没有太多用处:调用它并不比直接使用构造函数短。我看到的唯一真正的优势是你封装你要使用的Set<T>,这样如果你以后改变主意TreeSet<T>所有调用此toSet的方法}}方法将生成TreeSet<T>而不是HashSet<T>