Java 如果未指定toArray方法,如何使用toArray()将哈希集转换为数组?
查看java集合框架的java api,我在HashSet中找不到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(
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;
}