1

我正在循环进入许多行并尝试使用一些 if 语句过滤这些行。在每个 if 语句中,我需要为多个元素建立索引。我本可以使用 2d String[][] 来做到这一点,但问题是我不知道现阶段每行的大小是多少。

我正在寻找如下存储我的数据:

    0     1    3    4    5    6    7  etc.. 
 0 str   str  str  str  str  str  str
 1 str   str  str  
 2 
 3 str   str  str  str  str  str  

任何建议将不胜感激

 Edit:

对不起,如果我的问题不清楚。但我会在这里解释更多。

我的循环看起来像这样:

newArrayList
for (i; i < List ;i++)
{
  if(...)
  {
    newArrayList.add.(0, List.get(i));
  } else if(...)
  {
    newArrayList.add.(2, List.get(i));
  } else if(...)
  {
    newArrayList.add.(6, List.get(i));
  }
 }

上面的代码不起作用,但我只是想解释一下我实际上需要做什么!我的 if 语句可能会出现多次,我想为每个 if 语句预期加上一组字符串考虑一个索引。谢谢。

4

3 回答 3

2

你可以试试ArrayListofArrayList的:

    ArrayList<ArrayList<String>> strings = new ArrayList<ArrayList<String>>();
    strings.add(new ArrayList<String>()); // Adding a first array to the 'array of arrays'
    strings.get(0).add("String1"); // Add a string to the first array,
                                   // Similar to: arr[0][0] = "String1"

    //To access them element by element use a double for, note that "s" is each element
    for (ArrayList<String> l : strings) {
        for (String s : l) {

        }
    }

PS:AnArrayList<Object>类似于数组Object[],但更灵活。它有一些有用的方法,例如:

arr_list.get(index); // Getting an object in position 'index'
arr_list.add(object); // Adding an element (Similar to assignment in arrays)

编辑

如果您知道“行”的数量,那么您必须将它们添加到array of arrays. 有了这个for,您将“创建数组的空行”:

Rows:
   0
   1
  ...
   n


for (int i = 0; i < n; i++) {    // n is the number of "rows"
    strings.add(new ArrayList<String>());
}

然后将一个元素添加到“行”:

strings.get(0).add("String1"); // get(0) to obtain the first row, get(1) to obtain the second...
于 2013-10-26T06:57:10.370 回答
1

如果您的索引是从 0 到 n 的连续形式,并且您按该顺序插入它们,但 n 事先不知道:有两个经典解决方案:

1)如果您使用预先分配的固定数组进行操作,您显然需要两次通过。第一遍是扫描行并计算元素。然后第二遍是创建索引。

2)您可以通过 .add(item) 方法使用允许动态增长的集合来做到这一点,例如 List

如果您稍后将集合转换为固定大小的数组,那么使用方法 1) 可能会更快,因为由于内存管理/分配/重新分配,add 方法可能会更慢。

如果您的索引是从 0 到 n 的连续形式并且 n 是预先知道的,但是您插入的元素不是该顺序:

您应该使用上面的解决方案 1)。

如果您的索引不是连续的并且 n 事先已知:

3)您创建一个并通过(以任何顺序)Map<Integer,String> strings添加元素。strings.put(index, string)

如果您的索引不是唯一的(正如我们最终发现的那样):

4)您创建一个Map<Integer,ArrayList<String>> stringMap并通过添加元素

addStringForIndex(String string, Integer index)
{
    listForString = stringMap.get(index);
    if(listForString == null) {
        listForString = new ArrayList<String>;
        map.put(index, listForString);
    }
    listForString.add(string);
}
于 2013-10-26T06:59:46.837 回答
0

如果您不知道数组的大小,可以使用 List 实现,例如:

ArrayList<ArrayList<String>> 2D = new ArrayList<ArrayList<String>>();

然后使用 for-each 循环

于 2013-10-26T06:58:18.273 回答