Java中是否存在用于创建队列的静态工厂方法?
Java队列静态工厂方法相关问题解答
Java标准库目前没有内置和List.of、Arrays.asList完全对等的队列/双端队列静态工厂方法,你现在使用的new LinkedList<>(Arrays.asList(elements))是符合标准库规范的可行实现,除此之外不同场景还有以下可选方案:
JDK 8及更早版本实现
- 常规可变队列/双端队列写法:
该方案生成的集合支持正常增删操作,适用于大多数业务场景。// 队列实现 Queue<String> queue = new LinkedList<>(Arrays.asList("元素1", "元素2", "元素3")); // 双端队列实现 Deque<String> deque = new LinkedList<>(Arrays.asList("元素1", "元素2", "元素3")); - 不可变队列实现:
如需禁止队列修改,可用Collections.unmodifiableQueue做一层包装:Queue<String> immutableQueue = Collections.unmodifiableQueue(new LinkedList<>(Arrays.asList("元素1", "元素2", "元素3")));
JDK 9及更高版本优化写法
JDK 9引入了List.of静态工厂,可以替换Arrays.asList减少开销,同时优先选择性能更优的ArrayDeque作为队列实现:
// 可变队列 Queue<String> queue = new ArrayDeque<>(List.of("元素1", "元素2", "元素3")); // 可变双端队列 Deque<String> deque = new ArrayDeque<>(List.of("元素1", "元素2", "元素3"));
第三方库简化写法
如果项目允许引入第三方工具库,Guava提供了完全对等的便捷静态工厂方法:
// 生成不可变队列 Queue<String> immutableQueue = ImmutableQueue.of("元素1", "元素2", "元素3"); // 生成不可变双端队列 Deque<String> immutableDeque = ImmutableDeque.of("元素1", "元素2", "元素3"); // 生成可变ArrayDeque队列 Queue<String> mutableQueue = Queues.newArrayDeque(List.of("元素1", "元素2", "元素3"));
内容的提问来源于stack exchange,提问作者Volodya Lombrozo
相关产品推荐
相关产品推荐

