在我使用这个方法之后 .toArray() 在整数的优先级队列中,我得到如下对象数组:
.toArray()
Object[] objects = pq.toArray();
但是,我需要数组 int[] . 我试过:
int[]
int [] arr = (int[]) objects;
但上面说:
Cannot cast from Object[] to int[]
我怎样才能做到这一点?
mwngjboj1#
自 PriorityQueue 工具 Collection ,您可以使用 stream 迭代其元素并将它们Map到 int :
PriorityQueue
Collection
stream
int
PriorityQueue<Integer> pq = new PriorityQueue<>(Arrays.asList(1, 2, 5)); int[] arr = pq.stream().mapToInt(Integer::intValue).toArray(); System.out.println(Arrays.toString(arr)); // [1, 2, 5]
z31licg02#
这不是你能轻易做到的。您可能知道对象[]实际上只包含整数,这意味着应该可以对其进行强制转换,对吧?问题是,变量“objects”仍然存在。在一个物体[]中,你可以放置任何物体。所以在你的剧组结束后,有人可能会这样做:
objects[0] = "some string";
那么接下来会发生什么呢?int[]现在包含一个字符串,是否应该突然无效?不允许输入整数以外的东西吗 objects 这通常是允许的?铸造只是意味着你指向同一件事,但看它不同。你需要做的是改变它。对此,已经有了答案:java将字符串数组Map为整数数组所以,简单的铸造是没有帮助的。更新:@stridesconsus答案可能和我链接的一样好。
objects
7y4bm7vi3#
所有集合都提供了一个替代方案 toArray 指定元素类型的实现:
toArray
Integer[] objects = pq.toArray(Integer[]::new);
注意这需要JavaV11或更高版本https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/collection.html#toarray(java.util.function.intfunction)注意,结果数组显然是整数 Package 器对象在这种情况下,不知道这是否适合您的要求。编辑-快速测试:
PriorityQueue<Integer> q = new PriorityQueue<>(); q.add(42); System.out.println(Arrays.toString(q.toArray(Integer[]::new)));
3条答案
按热度按时间mwngjboj1#
自
PriorityQueue
工具Collection
,您可以使用stream
迭代其元素并将它们Map到int
:z31licg02#
这不是你能轻易做到的。
您可能知道对象[]实际上只包含整数,这意味着应该可以对其进行强制转换,对吧?
问题是,变量“objects”仍然存在。在一个物体[]中,你可以放置任何物体。所以在你的剧组结束后,有人可能会这样做:
那么接下来会发生什么呢?int[]现在包含一个字符串,是否应该突然无效?不允许输入整数以外的东西吗
objects
这通常是允许的?铸造只是意味着你指向同一件事,但看它不同。你需要做的是改变它。对此,已经有了答案:
java将字符串数组Map为整数数组
所以,简单的铸造是没有帮助的。
更新:@stridesconsus答案可能和我链接的一样好。
7y4bm7vi3#
所有集合都提供了一个替代方案
toArray
指定元素类型的实现:注意这需要JavaV11或更高版本
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/collection.html#toarray(java.util.function.intfunction)
注意,结果数组显然是整数 Package 器对象在这种情况下,不知道这是否适合您的要求。
编辑-快速测试: