【问题标题】:Java Collection implementation with these characteristics?Java Collection 实现有这些特点吗?
【发布时间】:2020-02-08 22:18:46
【问题描述】:

我想要一个具有以下特征的 Java Collection

  1. 不允许重复(如Set
  2. 可预测的迭代顺序(如 LinkedHashSetList
  3. 能够“插入”新元素(如List.add(index,element)
  4. 能够按索引检索元素(如List.get(index)

是否已经存在具有这些特征的东西?

感谢您的帮助!

【问题讨论】:

  • 这看起来像是这个问题的重复stackoverflow.com/questions/268672/…
  • @TylerKindy,是的,但最近的答案是 6 岁。从那时起,Java 发生了一些变化。
  • @Johnathan M 公平点。我今天不知道有什么比那个问题中提供的更好的解决方案。
  • 公平地说,这个问题的答案对这个问题仍然有效。 '那里有什么','是的,apache commons-collections4's SetUniqueList'。还是通过“外面”来寻找“JDK 的一部分”?在这种情况下,没有。虽然CopyOnWriteArraySet 在内部使用CopyOnWriteArrayList(至少在我的JDK 中)所以提供了所有功能,如果你不介意的话......搞砸......以访问内部List 第3 点和4.
  • @BeUndead,是的,我不介意自己动手​​做这个。只是想知道某些东西是否已经存在。在JDK中会很棒。感谢您的评论。

标签: java collections


【解决方案1】:

在文档中找不到任何内容,但为什么不直接构建一个?

import java.util.ArrayList;

public class SetList<E> extends ArrayList<E> {
    @Override
    public boolean add(E e) {
        if(this.contains(e)) {
            return false;
        }
        else{
            super.add(e);
            return true;
        }
    }
}

在 main 中有这个:

SetList<Integer> listLikeSet = new SetList<Integer>();
System.out.println(listLikeSet.add(1));
System.out.println(listLikeSet.add(2));
System.out.println(listLikeSet.add(1));
System.out.println(listLikeSet);

它输出:

true
true
false
[1, 2]

【讨论】:

  • addAll 方法呢? ListIteratoradd 方法呢? subListsadd方法呢?
  • "...为什么不建一个?"是的,如果需要,但我不想重新发明轮子。
猜你喜欢
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多