Java中是否有一种列表类型,可以按升序存储对象,并且如果此对象先前已添加,则不会再次添加?我知道Java Maps可以实现这一点,但我想知道是否有一种列表类型可以满足我的需求。否则,我必须重写contains、equalsTo和add方法,对吗?
Java中是否有一种列表类型,可以按升序存储对象,并且如果此对象先前已添加,则不会再次添加?我知道Java Maps可以实现这一点,但我想知道是否有一种列表类型可以满足我的需求。否则,我必须重写contains、equalsTo和add方法,对吗?
所以您需要一个只包含唯一元素的列表?有两个选择:
java.util.LinkedHashSet
- 保留插入的顺序,具有集合语义SetUniqueList
- 允许列表操作如get(..)
和 set(..)
ListOrderedSet
LinkedHashSet
所做的。如果他需要随机访问,他可以使用其他选项之一。 - Bozho取决于您指的顺序。
TreeSet
LinkedHashSet
使用TreeSet可以解决这个问题。例如:
SortedSet<Integer> myOrderedUniqueList = new TreeSet<Integer>()
http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html
SortedSet是Set的子接口,它保证集合中的元素是有序的。
SortedSet<Integer> orderedSet = new TreeSet<Integer>();
当你需要按元素值递增顺序存储非重复元素时,可以使用它们。
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"));
}
ArrayList
并覆盖add
方法。在将对象添加到其中之前,使用contains
方法测试对象的存在。顺序意味着通过索引访问(如列表)对吗? - Prince John Wesley