【问题标题】:Can LinkedHashSet in this code be replaced with a HashSet?这段代码中的 LinkedHashSet 可以用 HashSet 代替吗?
【发布时间】:2012-05-18 17:18:53
【问题描述】:

以下代码有什么作用? LinkedHashSet 可以替换为HashSet 吗?

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

【问题讨论】:

  • HashSet vs LinkedHashSet 的可能重复项
  • 我不会说这是重复的。
  • 山姆,欢迎来到 SO。如果您找到了任何您正在寻找的答案,您可以选择它们为已接受以将问题标记为已回答

标签: java data-structures


【解决方案1】:

下面的代码是做什么的?

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

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

LinkedHashSet 可以用 HashSet 代替吗?

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      如果您将a,b,c,d,a 作为输入,您将获得a,b,c,d 作为输出。

      是的,你可以

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

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

      【讨论】:

        【解决方案4】:

        它从实现 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 满足这两个要求,您可以替换它:-)。

        【讨论】:

          猜你喜欢
          • 2013-08-18
          • 2017-07-09
          • 2018-04-30
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多