当前位置: 首页 > 面试题库 >

LinkedHashSet-插入顺序和重复项-保持最新状态为“最重要”

夹谷和裕
2023-03-14
问题内容

我需要一个保持插入顺序并具有唯一值的集合。LinkedHashSet看起来很可行,但是存在一个问题-
当两个项目相等时,它将删除最新的项目(这很有意义),下面是一个示例:

set.add("one");
set.add("two");
set.add("three");
set.add("two");

LinkedHashSet会打印:

onetwothree

但是我需要的是:

onethreetwo

什么是最好的解决方案?是否有任何可以执行此操作的收集/收集方法,还是应该手动实现?


问题答案:

大多数Java集合都可以扩展以进行调整。

子类LinkedHashSet,重写add方法。

class TweakedHashSet<T> extends LinkedHashSet<T> {

    @Override
    public boolean add(T e) {
        // Get rid of old one.
        boolean wasThere = remove(e);
        // Add it.
        super.add(e);
        // Contract is "true if this set did not already contain the specified element"
        return !wasThere;
    }

}


 类似资料:
  • 在Java集合中,哪个集合不允许重复,哪个集合还保留数据的插入顺序?

  • 我有一个有重复项的有序列表(比较相等的对象),我想删除重复项。因为我想维持秩序,所以无法使用。 我的列表中的重复项不会一个接一个地出现,我希望保留最后出现的项。在这篇相关的文章中,似乎只保留了第一次出现的重复。 作为我简化的例子,这是我想要的: 我唯一能想到的是一个混乱的实现,使用多次迭代首先保存每个副本的最后一次出现,然后使用最后出现的副本的顺序重新创建原始列表。

  • 问题内容: 我有独特的和领域。电子邮件被重复。我只想保留所有重复项的一个电子邮件地址,但保留最新的(最后插入的记录)。 我该如何实现? 问题答案: 假设您的表包含以下数据: 因此,我们需要找到所有重复的电子邮件并删除所有重复的电子邮件,但是最新的ID。 在这种情况下,,和重复,所以我们要删除ID为1,7,2和6。 为此,首先我们需要查找所有重复的电子邮件: 然后,从该数据集中,我们需要为这些重复的

  • 问题内容: 我知道React可以异步并批量执行状态更新以优化性能。因此,在调用之后,您将永远无法相信要更新的状态。但是你可以信任的反应 更新相同的顺序状态被称为对 相同的组件? 不同的组件? 考虑在以下示例中单击按钮: 1. 在以下情况下,是否有可能 a为假而b为真 : 2. 在以下情况下,是否有可能 a为假而b为真 : 请记住,这些是我用例的极端简化。我意识到我可以以不同的方式进行操作,例如,在

  • 问题内容: 我想将一个键,值对添加到哈希表(或任何其他集合)中,但必须保持插入顺序。我怎样才能做到这一点? 就像我将1作为键“ 1”添加为值,将2作为键并将“ 2”添加为值。 输出应为: 问题答案: 以下是一些重要实现的特征差异: :“具有可预测的迭代顺序,通常是将键插入映射 的顺序 ( 插入顺序 )。” :“不保证地图的顺序” :“根据其键的自然顺序或按” 即是一个 因此,在这种情况下,您需要的

  • 我正在尝试创建一个搜索算法,该算法将坐标对存储在一个名为HashSquaresPec的包装器类中。为了避免重复并保持插入顺序,我将每个HashSquareSpec插入到LinkedHashSet中。即使我已经重写了equals()方法和hashCode()方法,LinkedHashSet仍然接受两个具有相同坐标对的HashSquareSpec对象。 HashSquare类 和HashSquareS