构造函数HashSet <integer>(int [])未定义</integer>

时间:2014-09-23 17:02:47

标签: java set

import java.util.HashSet;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.awt.*;

public class hash {

    public static void main(String[] args) {
        int[] paco = { 1, 2, 3, 4, 5, 5 };  //an array with duplicate items for the set
        Arrays.asList(paco);

        Set<Integer> set = new HashSet<Integer>(paco);  

    }

}

这是一个习惯于从列表中创建hashSet的简单练习。 首先,我创建了一个数组,然后将其转换为列表,然后尝试将其转换为HashSet,但是我收到以下错误: 构造函数HashSet(int [])未定义

1 个答案:

答案 0 :(得分:5)

不是创建数组然后创建列表,而是直接从您的值创建列表:

List<Integer> paco = Arrays.asList(1, 2, 3, 4, 5, 5);
Set<Integer> set = new HashSet<Integer>(paco);

另一个问题是你没有将Arrays.asList的返回值保存在任何地方。

如果您只是尝试在Arrays.asList(paco)上执行int[],它将返回带有单个元素的List<int[]>(int数组列表)。这不能用于初始化集合。

如果你真的想要除了集合之外还有一个值数组,你可以将它们声明为Integer而不是int,这将导致它们被装箱然后{{ 1}}将从他们创建Arrays.asList,而不是List<Integer>

List<int[]>

如果您需要将Integer[] paco = { 1, 2, 3, 4, 5, 5 }; Set<Integer> set = new HashSet<Integer>(Arrays.asList(paco)); 转换为int[],可以通过以下方式使用ArrayUtils from Apache Commons完成:

Integer[]

感谢Tomek的提示。