如何在另一个ArrayList中访问ArrayList的索引?

时间:2017-04-10 21:18:51

标签: java arraylist

我正在进行递归编程工作,我试图找出如何在更大的ArrayList中循环并获取ArrayList的值。我发现其他人之前已经提出过这个问题,但目前还不是很清楚如何才能做到这一点。

以下是我尝试做的一个例子:

import java.util.*;

public class Test{

public static void main(String[] args) {

    ArrayList<String> Array1 = new ArrayList<String>();

    // Array 1: [0][1][0][0][1]

    Array1.add("0");
    Array1.add("1");
    Array1.add("0");
    Array1.add("0");
    Array1.add("1");

    ArrayList<String> Array2 = new ArrayList<String>();

    // Array 2: [1][0][0][1][0]

    Array2.add("1");
    Array2.add("0");
    Array2.add("0");
    Array2.add("1");
    Array2.add("0");

    ArrayList<ArrayList<String>> Array3 = new ArrayList<ArrayList<String>>();

    // Array 3: [Array1][Array2]

    Array3.add(Array1);
    Array3.add(Array2);

// Now Find every indices or occurrences in Array2 where value is "1"

    for (ArrayList<String> Outer : Array3) {
        for (String inner : Outer) {
            if (str.equals("1")) {
                // Get all indices where "1" is found inside Array2 ?

            }
         }
      }
   }
}

所以我有Array3存储 Array1 Array2 ,我想要做的是循环Array3,找到Array2和Array2中的索引,其值为&#34 1#34;

此代码中的循环问题是它遍历Array1和Array2中的所有值,而我只是试图找到Array2中的值。

4 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

for (ArrayList<String> Outer : Array3) {
    for (int i = 0; i < Outer.size(); i++) {
        if (Outer == Array2 && Outer.get(i).equals("1")) {
            // The index is stored in 'i'
        }
    }
}

虽然我不明白为什么你只想在后者中查找索引时迭代ArrayList

迭代Array2

会更容易
for (int i = 0; i < Array2.size(); i++) {
    if (Array2.get(i).equals("1")) {
        // The index is stored in 'i'
    }
}

答案 1 :(得分:0)

这是你的主要应该是什么样的

public static void main(String[] args) {

    ArrayList<String> Array1 = new ArrayList<String>();

    // Array 1: [0][1][0][0][1]

    Array1.add("0");
    Array1.add("1");
    Array1.add("0");
    Array1.add("0");
    Array1.add("1");

    ArrayList<String> Array2 = new ArrayList<String>();

    // Array 2: [1][0][0][1][0]

    Array2.add("1");
    Array2.add("0");
    Array2.add("0");
    Array2.add("1");
    Array2.add("0");

    ArrayList<ArrayList<String>> Array3 = new ArrayList<ArrayList<String>>();

    // Array 3: [Array1][Array2]

    Array3.add(Array1);
    Array3.add(Array2);

// Now Find every indices or occurrences in Array2 where value is "1"
    int i = 0;
    for (String  s: Array3.get(1)) {

            if (s.equals("1")) {
                // Get all indices where "1" is found inside Array2 ?

                    System.out.println(i);
         }
            i++;
      }
   }

如果你只想在第二个ArrayList循环中找到它。通过get函数从Array3获取if

答案 2 :(得分:0)

我建议将ArrayList<String>更改为ArrayList<Integer>作为一种良好的编码方法。

    ArrayList<Integer> Array1 = new ArrayList<Integer>(Arrays.asList(0,1,0,0,1));
    ArrayList<Integer> Array2 = new ArrayList<Integer>(Arrays.asList(1,0,0,1,0));
    // Quick way to clear ArrayList

    List<ArrayList<Integer>> Array3 = new ArrayList<ArrayList<Integer>>();
    Array3.add(Array1);
    Array3.add(Array2);

    for (ArrayList<Integer> al : Array3) {
        if (al != Array2) { // check only for ArrayList2
            continue;
        }
        for (Integer I : al) { // Iterate ArrayList2
            if (I.equals(1)) {
                // 1 is stored in ArrayList2
            }
        }
    }
}

答案 3 :(得分:0)

如果您有兴趣从Array2查找“1”的计数(出现次数),这是一个简单的Java8解决方案,如下所示,带有内联注释:

Array3.stream().
    skip(1). //skip the first array
    flatMap(List::stream). //get the stream of elements from second array
    filter(value ->  value.equals("1")).//check which elements are equal to 1
    count();//count how many

此外,我强烈建议您严格遵循Java命名标准(请参阅here),因为变量名称必须以小写字母开头(例如array3,而不是Array3 })这样可以更容易阅读并遵循您的代码。