Java 当我们迭代使用集合中的每个构造时,元素的顺序是什么?

Java 当我们迭代使用集合中的每个构造时,元素的顺序是什么?,java,collections,foreach,Java,Collections,Foreach,当我们使用for each构造迭代集合时,java在每次迭代时从集合中选取每个元素的逻辑是什么,是随机的还是某种定义的排序?还是与自然秩序有关 假设你是说 for (Student student:students) 迭代顺序由Iterable对Student类型的实现决定,除非Student是数组,在这种情况下,顺序定义得很好 示例: 对于列表,顺序定义得很好 对于一般的集合,尽管某些集合(如TreeSet)确实有顺序,但情况并非如此 还是与自然秩序有关 有时是这样。如果您在元素类型实现Co

当我们使用for each构造迭代集合时,java在每次迭代时从集合中选取每个元素的逻辑是什么,是随机的还是某种定义的排序?还是与自然秩序有关

假设你是说

for (Student student:students)
迭代顺序由Iterable对Student类型的实现决定,除非Student是数组,在这种情况下,顺序定义得很好

示例:

对于列表,顺序定义得很好

对于一般的集合,尽管某些集合(如TreeSet)确实有顺序,但情况并非如此

还是与自然秩序有关

有时是这样。如果您在元素类型实现Compariable的树集上迭代,则该顺序将是元素类型的自然顺序,假设您没有将定义不同顺序的比较器传递给树集的构造函数。

假设您的意思是

for (Student student:students)
迭代顺序由Iterable对Student类型的实现决定,除非Student是数组,在这种情况下,顺序定义得很好

示例:

对于列表,顺序定义得很好

对于一般的集合,尽管某些集合(如TreeSet)确实有顺序,但情况并非如此

还是与自然秩序有关


有时是这样。如果您在元素类型实现Comparable的树集上迭代,则该顺序将是元素类型的自然顺序,前提是您没有将定义不同顺序的比较器传递给树集的构造函数。

这取决于您使用的集合类型

for(Student student:students){
 System.out.println(student.toString());
}
相当于

for (Iterator<String> i = students.iterator(); i.hasNext();)
{ 
    Student student= i.next(); 
    System.out.println(student.toString()); 
}
i、 next获取下一个student对象,其下一个方法实现基于集合类型

它可能与内存中的顺序相同


阅读更多信息:

这取决于您使用的收藏类型

for(Student student:students){
 System.out.println(student.toString());
}
相当于

for (Iterator<String> i = students.iterator(); i.hasNext();)
{ 
    Student student= i.next(); 
    System.out.println(student.toString()); 
}
i、 next获取下一个student对象,其下一个方法实现基于集合类型

它可能与内存中的顺序相同


阅读更多信息:

取决于收藏情况。如果是列表,则是插入顺序。学生是什么类型的集合?这个循环使用集合的Iterable性质,它使用它的底层迭代器,所以它完全取决于迭代器是如何为给定集合实现的。e、 g代表名单:真的取决于收藏。如果是列表,则是插入顺序。学生是什么类型的集合?这个循环使用集合的Iterable性质,它使用它的底层迭代器,所以它完全取决于迭代器是如何为给定集合实现的。e、 g名单: