如何更改以下方法以使用ArrayList? 我在想这样的事情:
from urllib import urlopen
WORD_URL = "http://learncodethehardway.org/words.txt"
WORDS = []
# load up the words from the website
for word in urlopen(WORD_URL).readlines():
WORDS.append(word.strip())
print "*" * 134
print urlopen(WORD_URL).readlines()
print "*" * 134
print WORDS
但我不确定如何完成它。
以下是我尝试从使用Array转换为使用ArrayList的方法:
public static boolean sortArrayList(ArrayList<Integer> list) {
return false;
}
答案 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 :(得分:1)
我对接受的答案有一些问题,正如@Sanj给出的那样:(A)它不处理列表中的空值,(B)它可能很容易被ArrayList<Integer>
专门化。仅Iterable<Integer>
和(C)方法名称具有误导性。
注意:对于(A),很有可能获得NPE是合适的 - OP没有说。对于演示代码,我假设null是可忽略的。其他解释也是公平的,例如null始终是“最小”值(需要不同的编码, LAAEFTR )。无论如何,行为应该是JavaDoc - 我在我的演示#8&gt; P
中没有做到这一点。注意:对于(B),保持专用版 可能 可以提高运行时性能,因为该方法“知道”支持数据在数组和编译器中 可能 使用Iterable
在版本上提取一些运行时效率,但这样的声明对我来说似乎不确定,无论如何,我希望看到基准测试结果支持这样的。 ALSO 即使版本I演示也可以使用通用元素类型进一步抽象(vs限于Integer
)。这样的方法可能有如下定义:
public static <T extends Comparable<T>> boolean isAscendingOrder(final Iterable<T> sequence)
注意:对于(C),我遵循@ Valentine的方法命名建议(差不多)。我非常喜欢这个想法,我更进一步明确地指出了检查排序的方向性。
下面是一个演示类,它显示了解决所有这些问题的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");
}
}
答案 2 :(得分:0)
尝试以下功能,需要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;
}