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

时间:2011-10-28 10:00:12

标签: java list collections

java中是否存在以升序存储对象的列表类型,如果先前已添加此对象,则不添加。我知道java map可以做到这一点,但我想知道是否有一个列表类型可以做我想要的。否则我必须覆盖contains,equalsTo和添加方法,对吧?

9 个答案:

答案 0 :(得分:38)

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

  • java.util.LinkedHashSet - 保留插入顺序,具有设置语义
  • 来自commons-collections SetUniquieList
  • 允许列出get(..)set(..)等列表操作
  • 来自commons-collections ListOrderedSet

答案 1 :(得分:14)

取决于你的意思。

答案 2 :(得分:4)

TreeSet可以解决这个问题。示例:

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

答案 3 :(得分:4)

我认为你是在一个SortedSet之后(这是一个扩展Set的接口)。 Set类似于List,但它只包含每个值中的一个。

TreeSet是SortedSet

的常用实现

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

答案 4 :(得分:1)

TreeSet可能正是您所需要的。

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

答案 5 :(得分:0)

它不是列表,但您可以查看Set http://download.oracle.com/javase/6/docs/api/java/util/Set.html

的实现

答案 6 :(得分:0)

使用带有重写的hashCode()和equals(Object obj)的java.util.LinkedHashSet使用唯一属性

答案 7 :(得分:0)

SortedSet是Set的子接口,它保证集合中的元素被排序。

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

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

答案 8 :(得分:0)

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"));
}