如何 return 2 ArrayLists in java

How to return 2 ArrayLists in java

我需要制作一个可以 return 2 ArrayLists 的方法。

我已经阅读了一些答案并提出了一些选择:

  1. return Pair(arrList 1, arrList 2);

    这是更简单的选项,但我不知道它是否有效,而且我不知道如何从调用此方法的方法中的 Pair 中提取 ArrayLists[=19] =]

  2. 尝试制作一个 class 来容纳这两个 ArrayList。我不知道这是否可行,但我认为应该可以。

有谁知道这些选项中的任何一个是否可行,或者我是否可以使用任何其他选项?

创建第三个数组列表,将两个数组列表放入第三个数组列表并返回。

您可以使用 java.util.Map 作为 return 类型;

示例代码:

public Map<Integer, List> getLists() {
    Map<Integer, List> listMap = new HashMap<Integer, List>();
     List list1 = new ArrayList();
     List list2 = new ArrayList();
     // Fill your lists

     listMap.put(1, list1);     
     listMap.put(2, list2);

     return listMap;
}


// to get list from map
Map<Integer, List> lists = getLists();

List l1 = lists.get(1);
List l2 = lists.get(2);

创建一个 class 和 属性 的异构列表

public Class MyClass
{
   public List<> list1;
   public List<> list2;
}

Return 来自您的方法的 class 的新对象。如果列表是同质的,return 一个包含两者的列表。
注意:您的两种解决方案都是正确的。如果你做对了,它肯定会起作用。

我将介绍如何实施您提到的每种方法。

Apache Common Lang API 中有一个 Pair class,从技术上讲,它不是 "standard" 库的一部分。您可以在 http://commons.apache.org/proper/commons-lang/.

下载

Pair 的文档是 here

你可以这样使用它:

// in the method
public Pair<ArrayList, ArrayList> yourMethod() {
    ...
    return ImmutablePair.of(yourArrayList1, yourArrayList2);
}

// when you call the method
Pair<ArrayList, ArrayList> pair = yourMethod();
pair.getLeft(); // gets you the first array list
pair.getRight(); // gets you the second array list

您也可以创建自己的 Pair class,这基本上就是您的第二种方法试图做的事情。

这是来自 this post 的示例。

public class Pair<K, V> {

    private final K element0;
    private final V element1;

    public static <K, V> Pair<K, V> createPair(K element0, V element1) {
        return new Pair<K, V>(element0, element1);
    }

    public Pair(K element0, V element1) {
        this.element0 = element0;
        this.element1 = element1;
    }

    public K getElement0() {
        return element0;
    }

    public V getElement1() {
        return element1;
    }

}

你可以这样使用它:

// in the method
public Pair<ArrayList, ArrayList> yourMethod() {
    ...
    return Pair.createPair(yourArrayList1, yourArrayList2);
}

// when you call the method
Pair<ArrayList, ArrayList> pair = yourMethod();
pair.getElement0(); // gets you the first array list
pair.getElement1(); // gets you the second array list

第三种选择是创建一个 class,它在两个 ArrayList 的相应索引中保存这对元素。例如,如果一个 ArrayList 包含姓名,第二个 ArrayList 包含生日,那么您可以创建一个包含姓名和生日的 class。现在用新 class.

的实例创建一个 ArrayList

这个解决方案取决于两个ArrayList的数据之间的关系。如果数据不像我的名字和生日这样紧密相关,那么这种解决方案可能不合适。

我必须为 Delta 调试实现相同的双 ArrayList。

我使用了带有 getter 和 setter 的私有变量,以及一个在构造函数中使用长度初始化 ArrayList 的构造函数。

这是我的 class(它是私有的,因为它在使用它的更大的 class 内部):

private class DeltaSegments {
    private ArrayList<String> deltas;
    private ArrayList<String> nablas;

    DeltaSegments(int dSize, int nSize) {
        deltas = new ArrayList<String>(dSize);
        nablas = new ArrayList<String>(nSize);
    }

    public ArrayList<String> getDeltas() {
        return deltas;
    }

    public ArrayList<String> getNablas() {
        return nablas;
    }

    public void setDeltas(ArrayList<String> _deltas) {
        deltas = _deltas;
    }

    public void setNablas(ArrayList<String> _nablas) {
        nablas = _nablas;
    }
}

下面是我如何实例化它:

private DeltaSegments getDeltaSegments(String str, int segments) {

    ArrayList<String> deltas = new ArrayList<String>(segments);
    ArrayList<String> nablas = new ArrayList<String>(segments);

    // ... Add data to deltas/nablas here ... //

    DeltaSegments ds = new DeltaSegments(segments, segments);
    ds.setDeltas(deltas);
    ds.setNablas(nablas);
    return ds;
}

稍后访问它们:

DeltaSegments ds = getDeltaSegments(failingLine, n);
ArrayList<String> deltas = ds.getDeltas();
ArrayList<String> nablas = ds.getNablas();

希望对您有所帮助!