繁体   English   中英

Java:按顺序包含唯一元素的列表

[英]Java : list that contains unique elements in order

java中是否有列表类型以升序存储对象,如果之前添加了此对象,则不添加。 我知道 java 地图可以做到这一点,但我想知道是否有一种列表类型可以满足我的需求。 否则我必须覆盖 contains、equalsTo 和 add 方法,对吗?

所以你需要一个只包含唯一元素的列表? 两种选择:

  • java.util.LinkedHashSet - 保留插入顺序,具有集合语义
  • 来自 commons-collections SetUniqueList - 允许列表操作,如get(..)set(..)
  • 来自 commons-collections ListOrderedSet

取决于你的意思是什么顺序。

TreeSet 可以解决问题。 例子 :

SortedSet<Integer> myOrderedUniqueList = new TreeSet<Integer>()

我认为您在追求 SortedSet (这是一个扩展 Set 的接口)。 Set 就像一个列表,但它只包含每个值中的一个。

TreeSet 是 SortedSet 的常用实现

http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html

SortedSet 是 Set 的一个子接口,它保证集合中的元素是有序的。

SortedSet<Integer> orderedSet = new TreeSet<Integer>();

当您必须按元素值的递增顺序存储非重复元素时使用它们

TreeSet可能正是您所需要的。

它将元素存储在排序树中。 因此,您可以按排序顺序迭代它们。 它不是一个列表,但它在添加和包含方面表现更好。

使用 java.util.LinkedHashSet 与覆盖 hashCode() 和 equals(Object obj) 使用唯一属性

public static <T> List<T> getUniqueListOrdered(List<T> values) {
    Set<T> uniqueValues = new HashSet<>();
    return values.stream().filter(value -> uniqueValues.add(value)).collect(Collectors.toList());
}


@Test
public void createUnique() {
    List<String> unique = ListUtils.getUniqueListOrdered(Arrays.asList("A", "A", "A", "B", "B"));
    Assert.assertEquals(unique, Arrays.asList("A", "B"));
}

它不是一个列表,但您可以查看 Sethttp://download.oracle.com/javase/6/docs/api/java/util/Set.html 的实现

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM