java中是否存在以升序存储对象的列表类型,如果先前已添加此对象,则不添加。我知道java map可以做到这一点,但我想知道是否有一个列表类型可以做我想要的。否则我必须覆盖contains,equalsTo和添加方法,对吧?
答案 0 :(得分:38)
所以你需要一个只包含唯一元素的列表?两个选项:
java.util.LinkedHashSet
- 保留插入顺序,具有设置语义SetUniquieList
的get(..)
和set(..)
等列表操作ListOrderedSet
答案 1 :(得分:14)
取决于你的意思。
TreeSet
LinkedHashSet
答案 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"));
}