Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果未指定toArray方法,如何使用toArray()将哈希集转换为数组?_Java_Collections_Hashset - Fatal编程技术网

Java 如果未指定toArray方法,如何使用toArray()将哈希集转换为数组?

Java 如果未指定toArray方法,如何使用toArray()将哈希集转换为数组?,java,collections,hashset,Java,Collections,Hashset,查看java集合框架的java api,我在HashSet中找不到toArray()方法,在抽象类集中有toArray()方法 class Ideone { public static void main (String[] args) throws java.lang.Exception { Set x = new HashSet(); x.add(4); //ArrayList<Integer> y = x.toArray(

查看java集合框架的java api,我在HashSet中找不到toArray()方法,在抽象类集中有toArray()方法

class Ideone {
    public static void main (String[] args) throws java.lang.Exception {
        Set x = new HashSet();
        x.add(4);
        //ArrayList<Integer> y = x.toArray(); this does not work !
        int[] y = x.toArray();//this does not work!

        System.out.println(x.toArray());//this gives some weird stuff printed : Ljava.lang.Object;@106d69c
    }
}
类表意符{
公共静态void main(字符串[]args)引发java.lang.Exception{
Set x=新的HashSet();
x、 增加(4);
//ArrayList y=x.toArray();这不起作用!
int[]y=x.toArray();//这不起作用!
System.out.println(x.toArray());//这会打印出一些奇怪的东西:Ljava.lang.Object;@106d69c
}
}

如果没有指定toArray(),如何将hashset转换为数组?

当然
hashset
实现
toArray
。它必须实现它,因为它实现了指定此方法的
Set
接口。实际实现是在
AbstractCollection
中,它是
AbstractSet
的超类,它是
HashSet
的超类

首先,您不应该使用原始类型

使用:


使用
x.toArray()
将为您提供一个
对象[]

请确保为
哈希集声明泛型

Set<Integer> x = new HashSet<>();

第一行

ArrayList y=x.toArray();这不行

首先,您使用了
setx=newhashset()即原始类型。编译器不知道它将包含integer对象,但在左手边的上面一行,你们说它将是integer的arraylist,实际上它是一个数组

第二行

int[]y=x.toArray()//这不行

上面这条线在左手边,你们说它是一个整数数组,实际上是一个对象数组

这将起作用

Object[] y = x.toArray();
但这不是正确的方法。您不应该使用原始类型

 Set<Integer> x = new HashSet<>();
 Integer[] intArray= x.toArray(new Integer[x.size()]);
Set x=new HashSet();
整数[]intArray=x.toArray(新整数[x.size()]);
System.out.println(x.toArray())//这给了一些奇怪的东西 :Ljava.lang.Object@106d69c

数组对象的打印表示。这就是为什么您将其视为
Ljava.lang.Object@106d69c


如果要打印每个元素,请对其进行迭代,然后打印。

看起来您最初想要创建的是ArrayList,而不是简单的数组。所以,试试这个

class Ideone 
{
        public static void main (String[] args) throws java.lang.Exception   
        {
            Set x = new HashSet();
            x.add(4);
            ArrayList<Integer> y = new ArrayList<>(x);
            System.out.println(y);
        }
}
类表意符
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
Set x=新的HashSet();
x、 增加(4);
ArrayList y=新的ArrayList(x);
系统输出打印项次(y);
}
}

比较在JDK 7中使用
TreeSet
ArrayList
Array
对小地图进行排序:

long start  = System.currentTimeMillis(); 
for(int i=0; i<10000000; i++){ 
   TreeSet a   = new TreeSet(payloads.keySet());                           
} 
System.out.println("TreeSet: "    + (System.currentTimeMillis()-start) + " ms.");
start       = System.currentTimeMillis(); 
for(int i=0; i<10000000; i++){ 
   ArrayList a = new ArrayList(payloads.keySet()); 
   Collections.sort(a);    
} 
System.out.println("ArrayList: "  + (System.currentTimeMillis()-start) + " ms.");
start       = System.currentTimeMillis(); 
for(int i=0; i<10000000; i++){ 
   String[] a = payloads.keySet().toArray(new String[payloads.size()]); 
   Arrays.sort(a);    
} 
System.out.println("Array: "  + (System.currentTimeMillis()-start) + " ms.");
long start=System.currentTimeMillis();

对于(inti=0;i,我们可以迭代循环并将值存储到数组中

int[] answer = new int[set1.size()];
int i = 0;
for (int num : set1) {
      answer[i++] = num;
}

好的,toArray返回一个
对象[]
,如果toString没有被正确覆盖,它只是打印一个典型的java输出。并且
对象[]
不能隐式转换为
int[]
@luk2302完全正确。这是我在回答中写的内容,但被否决了。我不确定回答中的问题是什么。有人能解释一下吗?这样我就可以了improve@MSach可能是因为您只解释打印输出,而不是为什么第一行不起作用,也不是什么是正确的方法-但这当然只是一个猜测uk。我没有注意到还有一个问题。威尔解释说是的,我只是注意到你可以向未指定的hashSet添加string、int、char等!@ERJAN是的,这是因为它随后使用
对象
类,这些原语的盒装版本扩展
对象
。了解什么是有用的这里怎么了?我不明白答案里有什么问题
class Ideone 
{
        public static void main (String[] args) throws java.lang.Exception   
        {
            Set x = new HashSet();
            x.add(4);
            ArrayList<Integer> y = new ArrayList<>(x);
            System.out.println(y);
        }
}
long start  = System.currentTimeMillis(); 
for(int i=0; i<10000000; i++){ 
   TreeSet a   = new TreeSet(payloads.keySet());                           
} 
System.out.println("TreeSet: "    + (System.currentTimeMillis()-start) + " ms.");
start       = System.currentTimeMillis(); 
for(int i=0; i<10000000; i++){ 
   ArrayList a = new ArrayList(payloads.keySet()); 
   Collections.sort(a);    
} 
System.out.println("ArrayList: "  + (System.currentTimeMillis()-start) + " ms.");
start       = System.currentTimeMillis(); 
for(int i=0; i<10000000; i++){ 
   String[] a = payloads.keySet().toArray(new String[payloads.size()]); 
   Arrays.sort(a);    
} 
System.out.println("Array: "  + (System.currentTimeMillis()-start) + " ms.");
int[] answer = new int[set1.size()];
int i = 0;
for (int num : set1) {
      answer[i++] = num;
}