2017-10-20 23 views
1

我是Java的新手,所以请接受我的道歉。我有一个有序的数组列表,即{ 10, 10, 10, 10, 120, 120 }检查某些项目是在底部,在arraylist

我怎么能循环通过列表检查INT 10放置在名列榜首的和int 120放置在底部列表的?

我尝试使用

for(int i=0; i<list.size(); i++){ 
    for(int j=0; j<list.size(); j++){ 

    } 
} 

但这是多远我能得到/理解。

+3

你说你有一个**有序**,即**排序**数组。现在你想检查数组是否正确排序**。那当然是,它已经被排序了。或者你想检查一个** unknown **数组是否被排序? – Zabuza

+0

此外,for循环看起来像是在迭代2D ArrayList,但是描述只描述一维ArrayList – Taelsin

+2

[如何确定List是否在Java中排序?](https:// stackoverflow .com/questions/3047051/how-to-determine-if-a-list-is-sorted-in-java) – Zabuza

回答

0

好吧,如果你想检查列表进行排序,你可以相邻的元素比较,看看列表中始终保持相同或增加 - 这是在中间像

if (list.get(i) > list.get(i + 1)) { 
    return false; 
} 
2

首先, ,你正在使用两个嵌套for循环。这在您的情况中不是必需的,使用单个for循环就足够了。此外,我建议您不要将测试集中在特定的值上。尝试以更高层次的方式思考。 在这种情况下,您应该测试列表中的每个项目都大于前一个项目。所以你应该从第二个元素(索引1)开始,遍历整个数组,将每个项目与前一个项目进行比较。

for (int i = 1; i < list.size(); i++) { 
    if (list.get(i) < list.get(i - 1)) { 
     System.out.println("list not properly ordered"); 
     return; 
    } 
} 

System.out.println("list correctly ordered"); 
return; 
+0

这是一个很好的答案(+1),用于访问基于数组的列表,如题。但是,对于非数组列表,例如'LinkedList',它将表现不佳。为了在所有类型的列表上获得良好的性能,应该使用'Iterator',例如。使用增强的for循环,如[本答案](https://stackoverflow.com/a/46857633/5221149)所示。 – Andreas

0

这里是将answer by @sirnino替代方案,使用增强型for循环。

其优点是即使在非基于数组的列表中,它也能表现良好,例如LinkedList,因为它使用Iterator而不是get(index)

int prev = Integer.MIN_VALUE; 
for (int value : list) { 
    if (prev > value) { 
     System.out.println("list not properly ordered"); 
     return; 
    } 
    prev = value; 
} 
System.out.println("list correctly ordered"); 
return;