3

下面的代码有什么作用?可以LinkedHashSet用a代替HashSet吗?

public class CollectionFunction {
    public <E> List<E> function(List<E> list) {
        return new ArrayList<E>(new LinkedHashSet<E>(list));
    }
}
4

4 回答 4

7

下面的代码有什么作用?

似乎它用于从列表中删除重复项而不更改顺序

  1. 删除重复项(LinkedHashSet 是一个集合)
  2. 维护插入顺序(LinkedHashSet具有可预测的迭代顺序)
  3. 转换回列表

LinkedHashSet 可以用 HashSet 代替吗?

不,它不会保证订单(#2)

于 2012-05-10T06:57:01.097 回答
1

Set 是项目的无序集合,其中列表必须保留所包含项目的顺序。您不能使用集合HashSet来实现列表,因为不存储项目的顺序。链接的哈希集存储这些信息。

于 2012-05-10T07:00:27.630 回答
1

此功能正在删除重复元素并保持插入顺序。

如果您提供a,b,c,d,a输入,您将获得a,b,c,d输出。

是的你可以

如果您不想要插入顺序,请将 LinkedHashSet 替换为 HashSet。

b,c,d,a如果将 LinkedhashSet 替换为 HashSet,输出可能是这样的

于 2012-05-10T07:05:34.340 回答
-3

它从实现 List 接口的对象中创建一个 ArrayList。ArrayList 类有一个采用 Collection 的构造函数: http : //docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html 如果 HashSet 也实现了 Collection http:// ,则必须查找docs.oracle.com/javase/7/docs/api/java/util/Collection.html。您还必须查找 HashSet 是否提供了相应的构造函数。由于 HashSet 满足这两个要求,您可以替换它:-)。

于 2012-05-10T06:59:45.807 回答