如果未指定方法 toArray,如何使用 toArray() 将哈希集转换为数组?
How to convert hash Set into array using toArray() if the method toArray is not specified?
查看 java api 的 java 集合框架,我在 HashSet 中找不到 toArray() 方法,抽象中有 toArray() 方法 class 放。
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
}
}
如果没有指定 toArray(),如何将 hashset 转换为数组?
当然 HashSet
实现了 toArray
。它必须实现它,因为它实现了指定此方法的 Set
接口。实际实现在 AbstractCollection
中,它是 AbstractSet
的超级 class,它是 HashSet
的超级 class。
首先,你不应该使用原始类型。
使用:
Set<Integer> x = new HashSet<>();
x.add(4);
然后转换为数组:
Integer[] arr = x.toArray(new Integer[x.size()]);
使用 x.toArray()
会给你 Object[]
。
确保为 HashSet
声明泛型
Set<Integer> x = new HashSet<>();
并将其转换为数组,如下所示:
int[] y = new int[x.size()];
int c = 0;
for(int x : x) y[c++] = x;
第一行
ArrayList y = x.toArray(); this does not work !
首先你使用了 Set x = new HashSet();
即原始类型。编译器不知道它会包含整数对象,但是在左边的上面一行你说它会是整数数组列表,实际上它是一个数组
第二行
int[] y = x.toArray();//this does not work!
在左边的上面那行你说它是整数数组,实际上它是一个对象数组
这行得通
Object[] y = x.toArray();
但这不是正确的方法。你不应该使用原始类型
Set<Integer> x = new HashSet<>();
Integer[] intArray= x.toArray(new Integer[x.size()]);
System.out.println(x.toArray());//this gives some weird stuff printed
: Ljava.lang.Object;@106d69c
它打印 toString 数组对象的表示。这就是为什么您将其视为 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);
}
}
比较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.");
产量:
TreeSet: 1527 ms.
ArrayList: 943 ms.
Array: 485 ms.
我们可以遍历循环并将值存储到数组中。
int[] answer = new int[set1.size()];
int i = 0;
for (int num : set1) {
answer[i++] = num;
}
查看 java api 的 java 集合框架,我在 HashSet 中找不到 toArray() 方法,抽象中有 toArray() 方法 class 放。
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
}
}
如果没有指定 toArray(),如何将 hashset 转换为数组?
当然 HashSet
实现了 toArray
。它必须实现它,因为它实现了指定此方法的 Set
接口。实际实现在 AbstractCollection
中,它是 AbstractSet
的超级 class,它是 HashSet
的超级 class。
首先,你不应该使用原始类型。
使用:
Set<Integer> x = new HashSet<>();
x.add(4);
然后转换为数组:
Integer[] arr = x.toArray(new Integer[x.size()]);
使用 x.toArray()
会给你 Object[]
。
确保为 HashSet
Set<Integer> x = new HashSet<>();
并将其转换为数组,如下所示:
int[] y = new int[x.size()];
int c = 0;
for(int x : x) y[c++] = x;
第一行
ArrayList y = x.toArray(); this does not work !
首先你使用了 Set x = new HashSet();
即原始类型。编译器不知道它会包含整数对象,但是在左边的上面一行你说它会是整数数组列表,实际上它是一个数组
第二行
int[] y = x.toArray();//this does not work!
在左边的上面那行你说它是整数数组,实际上它是一个对象数组
这行得通
Object[] y = x.toArray();
但这不是正确的方法。你不应该使用原始类型
Set<Integer> x = new HashSet<>();
Integer[] intArray= x.toArray(new Integer[x.size()]);
System.out.println(x.toArray());//this gives some weird stuff printed : Ljava.lang.Object;@106d69c
它打印 toString 数组对象的表示。这就是为什么您将其视为 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);
}
}
比较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.");
产量:
TreeSet: 1527 ms.
ArrayList: 943 ms.
Array: 485 ms.
我们可以遍历循环并将值存储到数组中。
int[] answer = new int[set1.size()];
int i = 0;
for (int num : set1) {
answer[i++] = num;
}