【发布时间】:2019-05-27 12:49:07
【问题描述】:
考虑以下代码:
final Set<String> allPaths = new HashSet<String>();
for (final String path: paths) {
allPaths.add(path);
}
final MyData d = new MyData(new ArrayList<String>(allPaths));
MyData 是我不应该碰的一类。它应该得到一个ArrayList 作为参数。在今天之前,我们使用这种方式是因为我们不关心订单,这就是我们使用Set的原因(所以不会重复)。但是现在,我想保持元素的顺序,所以经过一番研究,我发现我可以使用数据结构LinkedHashSet 来做到这一点。所以我做了:
final LinkedHashSet<String> allPaths = new LinkedHashSet<String>();
for (final String path: paths) {
allPaths .add(path);
}
final MyData d = new MyData(new ArrayList<String>(allPaths));
问题是,我不确定如何将LinkedHashSet 转换为ArrayList。另外,我想使用ArrayList 而不是LinkedHashSet,所以我不必转换它,但我必须遍历数组(O(n))。
我应该使用什么好的、干净和有效的方式?
【问题讨论】:
-
更改
MyData以使用Collection。为什么一开始就硬编码使用ArrayList? -
你的做法有什么问题?使用
LinkedHashSet和使用任何其他Set创建ArrayList应该没有区别,只是它将使用正确的迭代顺序。 -
你现在做的有什么问题?我的意思是,从集合中创建一个列表基本上就是你所做的,这很好。和
O(n)有什么关系?我不明白这一点。 -
...我想知道您的代码中的
paths是什么?这是List还是Set?
标签: java arraylist linkedhashset