PriorityQueue 到整数数组

Posted

技术标签:

【中文标题】PriorityQueue 到整数数组【英文标题】:PriorityQueue to Integer array 【发布时间】:2021-06-22 08:13:10 【问题描述】:

有没有更好的方法将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();

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

【问题讨论】:

pq.toArray(new int[][]) 非常感谢@zhh。这就像魅力一样。 :) 【参考方案1】:

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

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

请注意,根据您的问题,您使用了toArray() 的无类型版本,它不接受任何参数并返回Object[]。这相当于toArray(new Object[0])

【讨论】:

【参考方案2】:

使用 Java Stream 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();
    

【讨论】:

以上是关于PriorityQueue 到整数数组的主要内容,如果未能解决你的问题,请参考以下文章

PriorityQueue(优先级队列总结)

java中整数数组的优先级队列

为啥我不能将 PriorityQueue 存储到 MongoDB 中

PriorityQueue源码解析

Java数据结构及算法实战系列011:数组实现的优先级队列PriorityQueue

Java数据结构及算法实战系列011:数组实现的优先级队列PriorityQueue