如何将Array方法转换为ArrayList方法?

时间:2016-04-01 00:50:35

标签: java arrays arraylist methods type-conversion

如何更改以下方法以使用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;
}

3 个答案:

答案 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;
    }