【发布时间】:2016-05-26 16:53:11
【问题描述】:
给定一个排序整数数组列表的数组列表transactions,我正在编写代码以返回其唯一元素。例如,给定
transactions = [
[1, 1, 2, 3, 5, 8, 13, 21],
[2, 3, 6, 10],
[11, 21]
]
我的代码应该返回唯一的元素,保持排序顺序:
[1, 2, 3, 5, 6, 8, 10, 11, 13, 21]
为此,我只需将每个列表中的每个元素添加到 LinkedHashSet,根据它的定义,它会保持排序并删除重复项。
Set<Integer> uniqEl = new LinkedHashSet<>();
for (List<Integer> l : transactions) {
for (Integer n : l) {
uniqEl.add(n);
}
}
虽然我的代码利用 Java 库完成了工作,但我想要一个更高效的实现。有什么更好的算法可以从列表列表中生成唯一元素的排序列表吗?
【问题讨论】:
-
效率更高?所以你已经实际测量了,这才是你的应用程序的真正瓶颈? (旁注,为什么不使用
TreeSet?) -
uniqEl.addAll(l)可能稍微更有效率。 -
您的结果将是
1, 2, 3, 5, 8, 13, 21, 6, 10, 11,这不是您想要的排序顺序。像@Tunaki 建议的那样使用TreeMap会给你想要的结果。
标签: java sorting arraylist set duplicates