我正在查看Java中的列表和排序。根据文档,List
是一个有序的对象列表,当对象是标准类,如String
,Integer
时,它将使用标准比较器进行比较。想到几个问题。
如果您的某个任意对象(不是标准类)的列表是必须实现Comparator
界面,还是依赖于toString()
?
您是否必须使用ListIterator按您需要的顺序遍历列表?
查看文档元素最后会添加到列表中,因此除非您对其进行排序或使用ListIterator,否则不会按顺序排列。
答案 0 :(得分:3)
添加到List
的项目按其输入顺序存储(因此它是插入顺序)。如果您想对List
进行排序,可以使用Collections.sort(List, Comparator)
或Collections.sort(List)
方法。
答案 1 :(得分:2)
有序!=已排序
有序意味着结构中的元素具有确定的顺序(通过插入给出)。
Set
是无序的,List
是有序的,LinkedHashSet
是有序的,等等......
如果您希望列表具有特定顺序,由
确定implements Comparable
)或implements Comparator
),您必须排序它(请参阅Collections.sort()
)。
答案 2 :(得分:2)
首先,我担心您对订购的和已排序条款感到困惑。 "有序"并不意味着元素按照任何标准排序。它只是意味着元素顺序是可预测的。在列表的情况下,顺序由列表索引决定,例如,如果使用add()
方法添加5个元素,则将遍历列表并以相同的顺序获取元素。
排序意味着可以使用可用方法之一(例如Collections.sort()
)重新排列(排序)元素。在这种情况下,比较器是相关的
关于"标准"和非标准类。 String
和Integer
在排序方面都没有任何权限。除Comparator
接口外,JDK还提供Comparable
和String
实现的Integer
接口。这就是String和Interger列表可以按自然顺序排序的原因。有关更多详细信息,请查看提到的接口的javadoc。您可以让您的课程实施Comparable
并享受相同的功能。
Comparator
和Comparable
都与[{1}}无关,虽然可以在实施时同时使用,但我们强烈建议不要这样做。
toString()
提供了与ListIterator
相对的更多方法。例如,您可以向后遍历列表。您应该根据需要选择迭代器类型。虽然自从java 5发布以来(大约10年前),迭代器很少需要,因为所有集合都实现了Iterator
,可以直接在Iterable
循环中使用。如果要在迭代期间删除元素,则基本上需要迭代器。从几个月前发布的Java 8开始的BTW for
将被越来越多地使用,因此迭代器将变得更不受欢迎。
答案 3 :(得分:0)
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
提供更多功能,例如: