修改数组列表

时间:2014-01-31 20:49:20

标签: java arrays list

我一直在努力修改传递给方法的数组列表。我只能修改该数组列表而不在该方法中创建任何新的数组列表。

问题在于:

编写方法stutter,其中ArrayList Stringsinteger k作为参数,并用字符串的k个副本替换每个字符串。例如,如果列表在调用方法之前存储值["how", "are", "you?"]且k为4,则应在方法执行完毕后存储值["how", "how", "how", "how", "are", "are", "are", "are", "you?", "you?", "you?", "you?"]。如果k为0或负数,则呼叫后列表应为空。

创建新数组列表的一种方法是:

public static void stutter(ArrayList<String> list, int k) {
     ArrayList<String> a = new ArrayList<String>();
     String s = "";
     if(k > 0) {
         for(int i = 0; i < list.size(); i++) {
             s = list.get(i);
             for(int j = 0; j < k; j++) {
                a.add(s);
             }
         }
     } 
}

仅在不创建新数组列表的情况下修改ArrayList<String> list的一种方法是什么?感谢

5 个答案:

答案 0 :(得分:1)

public static void addItem(List<String> list, int k){
    int size = list.size() * k;

    for (int i=0; i<size; i=i+k){
        String s = list.get(i);
        for (int j=0; j<k-1; j++){
            list.add(i+j, s);
        }
    }
}

答案 1 :(得分:0)

在进行迭代之前,可以将ArrayList的大小保存到变量中。

int size = list.size();
for(int i=0; i<k; i++){
    for(int j=0; j<size; j++){
        list.add(list.get(j));
    }
}

但是,对于您的示例,列表将变为["how","are","your","how","are","your","how","are","your","how","are","your"]。 如果你想要相同的值在一起:

int size = list.size();
for(int i=0;i<size;i++){
    String s = list.get(i*k);
    for(int j=0;j<k-1;j++){
        list.add(i*k+j, s);
    }
}

答案 2 :(得分:0)

public static void addItem(List<String> list, int k) {

    int size = list.size();

    for (int i = 0; i < size * (k - 1); i++) {
        list.add("");
    }

    for (int i = size - 1; i >= 0; i--) {
        for (int m = k - 1; m >= 0; m--) {
            list.set(k * i + m, list.get(i));
        }
    }

}

这种方法将保持两个指针,向后填充列表,不涉及任何移位。

答案 3 :(得分:0)

public static void stutter(ArrayList<String> arrayList, int k) {
    if (k > 0) {
    int index = 0;
    k = k - 1;
    for (int i = 0; i < arrayList.size(); i = i + (k + 1)) {
        for (int j = 0; j < k; j++) {
            arrayList.add(index, arrayList.get(i));
        }
        index = index + (k + 1);
    }
}
    else
    arrayList.clear(); 
}

输入:[how, are, you?], k=4

输出:[how, how, how, how, are, are, are, are, you?, you?, you?, you?]

答案 4 :(得分:-1)

public static void stutter(ArrayList<String> list, int k) {
    if (k <= 0) {
        list.clear();
    }
    for (int i = list.size() - 1; i >= 0; i--) {
        for (int r = 1; r < k; r++) {
            list.add(i + 1, list.get(i));
        }
    }
}