如何将数组转换为arraylist并对其进行更改以反映在数组中?

时间:2015-05-14 07:39:40

标签: java arrays arraylist

我想将数组转换为Arraylist。但我不想制作该数组的新副本。我希望Arraylist成为该数组的引用。

例如

var arr[]  = {"abc","def","ghi"}

List tempList = new ArrayList();

for(String val:arr){
tempList.add(val)
}

for(Iterator iterator= tempList.listIterator();tempList.hasNext()){
    String temp = iterator.next();
    if(temp == "def"){
    tempList.remove(temp);
    }
}
arr = tempList.toArray(tempList.size());

现在这是我真正想要做的一个测试示例。在这里我首先操作列表然后将其转换为数组,然后用列表中的新数组替换“arr”。 但是,如果我从templist中删除一个值,那么它是否可能通过引用从arr中删除?

2 个答案:

答案 0 :(得分:4)

如果您不在列表中添加或删除元素,则可以使用Arrays.asList实现此目的。

使用Arrays.asList(arr)将为您提供该阵列支持的List。您将能够更改列表中存储的元素(通过调用set(int index, E element)),并将更改反映在数组中。但是您无法添加或删除元素,因为数组具有固定长度。

/**
 * Returns a fixed-size list backed by the specified array.  (Changes to
 * the returned list "write through" to the array.)  This method acts
 * as bridge between array-based and collection-based APIs, in
 * combination with {@link Collection#toArray}.  The returned list is
 * serializable and implements {@link RandomAccess}.
 *
 * <p>This method also provides a convenient way to create a fixed-size
 * list initialized to contain several elements:
 * <pre>
 *     List&lt;String&gt; stooges = Arrays.asList("Larry", "Moe", "Curly");
 * </pre>
 *
 * @param a the array by which the list will be backed
 * @return a list view of the specified array
 */
public static <T> List<T> asList(T... a)

答案 1 :(得分:0)

你可以做的是编写一个从数组中更新ArrayList的方法(这将是参数)。该方法将更新ArrayList,以便它保存传入的数组的值。为了给它一个数组和ArrayList都“同步”的错觉,每次更改原始数据时都必须调用此方法阵列。为了优化方法,我会给它两个参数:数组和ArrayList。因为ArrayList是一个对象,所以不需要从该方法返回它,因为您实际上将在方法中更改对象本身。只需确保在 之前初始化ArrayList 并将其传递给方法(但仅限第一次)。以下是这个想法的快速实现:

private void updateArrayList(String[] arr, ArrayList<String> alist) {
    for(int i = 0, n < arr.length; i < n; i++) {
        alist.set(i, arr[i]);
    }
}

如果我犯了错误,请发表评论,并请我澄清我是否对答案的某些部分不清楚。另外,请告诉我这个答案是否有帮助,或者即使我正确地解释了这个问题。