2016-04-01 34 views
1

如何更改下面的方法来使用ArrayList? 我想是这样的:如何将Array方法转换为ArrayList方法?

public static boolean sortArrayList(ArrayList<Integer> list) { 
    return false; 
} 

,但我不知道如何去完成它。

这里是我想从使用数组的转换,而不是与一个ArrayList的工作方法:

public static boolean sortArrayList(final int[] data) { 
    for(int i = 1; i < data.length; i++) { 
     if(data[i-1] > data[i]) { 
      return false; 
     } 
    } 
    return true; 
} 
+1

由于您sortArrayList方法ArrayList的不排序,您可能希望将其重命名为像isASortedArrayList – Valentin

+0

您的方法名称!这实际上不会再有误导。 –

回答

1
public static boolean sortArrayList(final ArrayList <Integer> data) { 
    for (int i = 1; i < data.size(); i++) { 
     if (data.get(i - 1) > data.get(i)) { 
      return false; 
     } 
    } 
    return true; 
} 
1

我有一个公认的答案的一些问题,通过@给出Sanj:(A)它不处理列表中的空值,(B)它不必要地专用于ArrayList<Integer>,因为它很容易仅仅是Iterable<Integer>,(C)方法名称具有误导性。

注意:对于(A),获得NPE很可能是合适的--OP没有说。对于演示代码,我认为空值是可以忽略的。其他解释也是公平的,例如, null始终是“最小”值(需要不同的编码,LAAEFTR)。无论如何,该行为应JavaDoc'ed - 这是我没有在我的演示#8>点

注意做到:对于(B),保持专业版威力提高运行时性能,因为该方法“知道”支持数据在一个数组中,编译器可能会使用Iterable提取一些运行时效率,但这种说法似乎对我来说可疑,无论如何,我希望看到基准测试结果为支持这样的。 还可以即使我的演示版本可以进一步抽象使用通用元素类型(vs限于Integer)。这种方法可能有定义,如:

public static <T extends Comparable<T>> boolean isAscendingOrder(final Iterable<T> sequence) 

注:(C),我关注@情人节的方法命名建议(几乎)。我非常喜欢这个想法,我进一步明确地提出了检查排序的方向性。

下面是一个演示类,该演示类显示了解决所有这些问题的isAscendingOrder的良好行为,然后是@ Sanj的解决方案(直到NPE)出现类似的行为。当我运行它,我得到控制台输出:

true, true, true, true, false, true 
------------------------------------ 
true, true, true, true, false, 
Exception in thread "main" java.lang.NullPointerException 
    at SortCheck.sortArrayList(SortCheck.java:35) 
    at SortCheck.main(SortCheck.java:78) 

import java.util.ArrayList; 

public class SortCheck 
{ 
    public static boolean isAscendingOrder(final Iterable<Integer> sequence) 
    { 
     Integer prev = null; 
     for (final Integer scan : sequence) 
     { 
      if (prev == null) 
      { 
       prev = scan; 
      } 
      else 
      { 
       if (scan != null) 
       { 
        if (prev.compareTo(scan) > 0) 
        { 
         return false; 
        } 

        prev = scan; 
       } 
      } 
     } 

     return true; 
    } 

    public static boolean sortArrayList(final ArrayList<Integer> data) 
    { 
     for (int i = 1; i < data.size(); i++) 
     { 
      if (data.get(i - 1) > data.get(i)) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 

    private static ArrayList<Integer> createArrayList(final Integer... vals) 
    { 
     final ArrayList<Integer> rval = new ArrayList<>(); 

     for(final Integer x : vals) 
     { 
      rval.add(x); 
     } 

     return rval; 
    } 

    public static void main(final String[] args) 
    { 
     final ArrayList<Integer> listEmpty  = createArrayList(); 
     final ArrayList<Integer> listSingleton = createArrayList(2); 
     final ArrayList<Integer> listAscending = createArrayList(2, 5, 8, 10 ); 
     final ArrayList<Integer> listPlatuea = createArrayList(2, 5, 5, 10 ); 
     final ArrayList<Integer> listMixedUp = createArrayList(2, 5, 3, 10 ); 
     final ArrayList<Integer> listWithNull = createArrayList(2, 5, 8, null); 

     System.out.print(isAscendingOrder(listEmpty ) + ", "); 
     System.out.print(isAscendingOrder(listSingleton) + ", "); 
     System.out.print(isAscendingOrder(listAscending) + ", "); 
     System.out.print(isAscendingOrder(listPlatuea ) + ", "); 
     System.out.print(isAscendingOrder(listMixedUp ) + ", "); 
     System.out.print(isAscendingOrder(listWithNull) + "\n"); 

     System.out.println("------------------------------------"); 

     System.out.print(sortArrayList(listEmpty ) + ", "); 
     System.out.print(sortArrayList(listSingleton) + ", "); 
     System.out.print(sortArrayList(listAscending) + ", "); 
     System.out.print(sortArrayList(listPlatuea ) + ", "); 
     System.out.print(sortArrayList(listMixedUp ) + ", "); 
     System.out.print(sortArrayList(listWithNull) + "\n"); 
    } 
} 
1

尝试下面的功能,它需要integer array并将其转换成ArrayList,然后计算结果:

public static boolean sortArrayList(final int[] data) { 
     List<Integer> aList = new ArrayList<Integer>(); 
     for (int index = 0; index < data.length; index++) 
      aList.add(data[index]); 

     for (int i = 1; i < aList.size(); i++) { 
      if (aList.get(i - 1) > aList.get(i)) { 
       return false; 
      } 
     } 
     return true; 
    } 
相关问题