条件:不修改原有列表;只使用JDK,没有外部库。单行程序或JDK 1.3版本的加分项。

有没有比这更简单的方法:

List<String> newList = new ArrayList<String>();
newList.addAll(listOne);
newList.addAll(listTwo);

当前回答

你可以使用Apache的common -collections库:

List<String> newList = ListUtils.union(list1, list2);

其他回答

可能并不简单,但有趣而丑陋:

List<String> newList = new ArrayList<String>() { { addAll(listOne); addAll(listTwo); } };

不要在产品代码中使用它……;)

在一般情况下,如果不介绍您自己的实用程序方法,我无法改进双行程序,但如果您确实有字符串列表,并且您愿意假设这些字符串不包含逗号,您可以使用这个长一行程序:

List<String> newList = new ArrayList<String>(Arrays.asList((listOne.toString().subString(1, listOne.length() - 1) + ", " + listTwo.toString().subString(1, listTwo.length() - 1)).split(", ")));

如果去掉泛型,这应该是JDK 1.4兼容的(尽管我还没有测试)。也不建议用于生产代码;-)

简短一点的是:

List<String> newList = new ArrayList<String>(listOne);
newList.addAll(listTwo);

几乎所有的回答都建议使用数组列表。

List<String> newList = new LinkedList<>(listOne);
newList.addAll(listTwo);

更喜欢使用LinkedList进行高效的添加操作。

ArrayList add是O(1)平摊,但最坏情况是O(n),因为数组必须调整大小和复制。 而LinkedList add总是常数O(1)。

更多信息https://stackoverflow.com/a/322742/311420

在我看来最聪明的是:

/**
 * @param smallLists
 * @return one big list containing all elements of the small ones, in the same order.
 */
public static <E> List<E> concatenate (final List<E> ... smallLists)
{
    final ArrayList<E> bigList = new ArrayList<E>();
    for (final List<E> list: smallLists)
    {
        bigList.addAll(list);
    }
    return bigList;
}