我正在查看 Java 中的列表和排序。根据文档 aList
是对象的有序列表,当对象是标准类时,例如String
,Integer
它将使用标准比较器进行比较。有几个问题浮现在脑海。
如果您列出了一些任意对象(不是标准类),您是否必须实现
Comparator
接口,或者它会依赖toString()
?您是否必须使用 ListIterator 以您需要的顺序遍历列表?
查看文档元素在最后添加到列表中,因此除非您对其进行排序或使用 ListIterator,否则它们不会按顺序排列。
我正在查看 Java 中的列表和排序。根据文档 aList
是对象的有序列表,当对象是标准类时,例如String
,Integer
它将使用标准比较器进行比较。有几个问题浮现在脑海。
如果您列出了一些任意对象(不是标准类),您是否必须实现Comparator
接口,或者它会依赖toString()
?
您是否必须使用 ListIterator 以您需要的顺序遍历列表?
查看文档元素在最后添加到列表中,因此除非您对其进行排序或使用 ListIterator,否则它们不会按顺序排列。
添加到 a 的项目List
按它们输入的顺序存储(所以它是插入顺序)。如果要对 a 进行排序List
,可以使用Collections.sort(List, Comparator)
或Collections.sort(List)
方法。
已排序!=已排序
有序意味着结构中的元素具有确定的顺序(由插入给出)。
Set
s 是无序的,List
s 是有序的,LinkedHashSet
是有序的,等等......
如果您希望列表按特定顺序排列,由
implements Comparable
) 或implements Comparator
),您必须对其进行排序(参见 参考资料Collections.sort()
)。
首先,恐怕您对有序和排序的术语感到困惑。“有序”并不意味着根据任何标准对元素进行排序。这只是意味着元素顺序是可预测的。在列表的情况下,顺序由列表索引决定,例如,如果您使用add()
方法添加 5 个元素,您将遍历列表并以相同的顺序获取元素。
排序意味着可以使用一种可用方法(例如Collections.sort()
)重新排列(排序)元素。在这种情况下,比较器是相关的。
关于“标准”和非标准类。在排序方面既不String
也不Integer
没有任何特权。除了Comparator
接口之外,JDK 还提供了由和Comparable
实现的接口。这就是字符串和整数列表可以按自然顺序排序的原因。请查看上述接口的 javadoc 以获取更多详细信息。您可以让您的班级实现并享受相同的功能。String
Integer
Comparable
两者都不相关Comparator
,尽管它可以在实现两者时使用,但强烈不推荐。Comparable
toString()
ListIterator
相对于 提供了更多的方法Iterator
。例如,您可以向后遍历列表。您应该根据需要选择迭代器类型。尽管自从 java 5 发布(大约 10 年前)以来,迭代器的需求越来越少,因为所有集合都实现Iterable
了可以直接在for
循环中使用的实现。如果您想在迭代期间删除元素,基本上需要迭代器。BTW 从几个月前发布的 Java 8 开始List.forEach()
会被越来越多地使用,因此迭代器将变得更加不受欢迎。
a List is an ordered list of Objects
这里的“有序”是指插入顺序。
如果要按特定顺序对列表进行排序,则必须提供Comparator
或使您的元素实现Comparable
。你可以打电话Collectoins class's:
public static <T extends Comparable<? super T>> void sort(List<T> list)
或者
public static <T> void sort(List<T> list, Comparator<? super T> c)
如果你只想浏览你的列表,一个普通Iterator
的就足够了。同时,ListIterator
提供更多功能,例如: