【问题标题】:Check if an object of generic type is in LinkedList检查泛型对象是否在 LinkedList
【发布时间】:2016-02-27 19:27:15
【问题描述】:

我有一个泛型类型StateLinkedList。在这个LinkedList 中,我有数百甚至数千个State 对象。我如何以最有效的方式检查新生成的State 对象是否已在列表中?

状态对象:

public State(PlayerAddress player, LinkedList<BoxAddress> boxList, char[][] map, String solution, String stateHash) {
    this.player = player;
    this.boxList = boxList;
    this.map = map;
    this.solution = solution;
    this.stateHash = stateHash;
    boxListString = boxListToString(boxList);
    mapString = mapString(map);
}
}

此外,State 对象由构造函数中所示的另一个通用对象组成。如何检查两个 State 对象在各个方面(PlayerAddress、LinkedList 等)是否相同?

【问题讨论】:

    标签: java list linked-list


    【解决方案1】:

    你有没有试过the contains method?这可以工作。另外不要忘记您可以覆盖内容,因此您也可以通过覆盖 hascode 和 compare 方法来比较 hascode。

    【讨论】:

      【解决方案2】:

      在您的情况下,我强烈建议您使用 contains 方法。哪个是您的案例最有效的查找方法。

      查看包含的 java 文档:

      公共布尔包含(对象o) 如果此列表包含指定的元素,则返回 true。更正式地说,当且仅当此列表包含至少一个元素 e 满足 (o==null ? e==null : o.equals(e)) 时,才返回 true。

      所以你应该只需要为你的 State 类覆盖 equals。哈希码是集合所必需的。

      【讨论】:

      • 这不是真的。在包含数千个元素的链表中查找操作根本没有效率。
      • 我们正在讨论使用列表,据我了解,没有提到是否需要 SET 等。
      • 任务是找到一种有效的方法。
      • 如果我们对速度非常明确并且不关心实现并假设更改实际数据结构很好,我会推荐一个像fastutil 这样工作得很好的库。老实说,我假设他想保留历史列表,而不是维护 2 个不同的集合,等等。特别是因为我不知道他的可用内存。我们甚至可以更进一步,转移到 scala 并利用并行收集,以进一步缩短查找时间。
      猜你喜欢
      • 1970-01-01
      • 2011-01-24
      • 2011-03-06
      • 2021-02-06
      • 1970-01-01
      • 2013-09-12
      • 2018-05-07
      • 2014-02-03
      • 1970-01-01
      相关资源
      最近更新 更多