PriorityQueue 到整数数组

PriorityQueue to Integer array

有没有更好的方法将 PriorityQueue<int[]> pq 转换为 int[pq.size()][pq.peek().length]

pq.toArray() 给出了一个 Object 数组,我不太确定如何将它转换为 int 数组。

我试过的一种方法是:

PriorityQueue<int[]> pq = new PriorityQueue<int[]>();
int[] fin = new int[pq.size()];
for(int i=0;i<pq.size();i++) {
    fin[i] = pq.remove();
}

但我正在寻找更好的时间优化解决方案。

PriorityQueue 实现 Collection#toArray(T[] a),您可以像这样使用:

int[][] fin = pq.toArray(new int[0][0]);

请注意,根据您的问题,您使用了无参数的 toArray() 和 returns Object[] 的无类型版本。这相当于 toArray(new Object[0]).

使用 Java 流 API 你可以解决这个问题。

int[] fin = pq.stream()
    .map(String::valueOf)
    .mapToInt(Integer::parseInt)
    .toArray();

示例:

import java.util.Arrays;
import java.util.PriorityQueue;

public class Main {

    public static void main(String[] args) {
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        pq.add(1);
        pq.add(2);
        pq.add(3);

        int[] fin = convertToIntArray(pq);

        System.out.println(Arrays.toString(fin));
    }

    private static int[] convertToIntArray(PriorityQueue<Integer> pq) {
        return pq.stream()
                .map(String::valueOf)
                .mapToInt(Integer::parseInt)
                .toArray();
    }
}