克隆java ArrayList并阻止它进行修改

tec*_*0nn 2 java arraylist

我有一个数据结构,如数据库Rowset,它有行和行有列.我需要初始化一个具有空值的列,当前代码是循环遍历每一列的行并将值初始化为NULL.如果你有100或10行的列,这是非常低效的.

所以我保持一个初始化的列列表是RowSet级别,然后为各个行执行这个Arraylist的克隆,因为我相信clone()比通过每个元素循环更快.

row.columnsValues = rowsset.NullArrayList.clone()

问题是NullArrayList在被克隆后可能会被意外修改,从而牺牲了RowSet级别的ArrayList的完整性,以防止我做3件事

1)Delcaring ArrayList作为final 2)我插入的任何元素都是final或null 3)方法尽管将这个arrayList传递给其他数组但是声明为final.

听起来像一个计划,你看到任何漏洞吗?

Boz*_*zho 7

您可以使用 Collections.unmodifiableList((List) originalList.clone())

返回指定列表的不可修改视图.此方法允许模块为用户提供对内部列表的"只读"访问.


paj*_*ton 5

您仍然可以向阵列添加新元素.

为什么不使用:

row.columnsValues = Collections.unmodifiableList( (ArrayList) rowsset.NullArrayList.clone())