ArrayList使用禁忌——ArrayList之间的赋值(小记)

不积跬步无以至千里

       关于ArrayList的使用,常常我们会初始化后,通过一个外界的借口获取到一个另一个ArrayList,然后对我们本类里的ArrayList对象一顿骚操作,还以为被传过来的对象没被改变,满满的沉浸在自己小聪明的窃喜之中(不破坏原有的ArrayList,而用另一个ArrayList去操作,挺好)。

       其实如果对象ArrayList有深入研究或者理解指针的概念,也许你也不会犯这个低级的错误,其实你再赋值给你本类对象的同时,你就是把本类ArrayList对象指针也指向了传过来的ArrayList,因此你这样操作,修改的还是传过来的ArrayList,因此正确的操作方法(不想影响传过来的ArrayList,而想有一个新的ArrayList去操作这个ArrayList数据源)是要这样的:

(1)for循环,添加数据

private ArrayList<ButtonBean> buttomContainerData = new ArrayList<>();
private void initData() {
    buttomContainerData.clear();
    for (int i = Data.BRIEF_SHOW.size(); i > 0; i--) {
        buttomContainerData.add(0, Data.BRIEF_SHOW.get(i - 1));
    }
}

        其中的buttomContainerData就是本类的ArrayList对象,而Data.BRIEF_SHOW就是外界的ArrayList对象。用过for循环把数据源中数据手动添加到本类中的ArrayList对象即可。

   (2)用ArrayList的clone方法

private void initData() {
    buttomContainerData.clear();
    ArrayList<ButtonBean> temporaryArrayList = (ArrayList<ButtonBean>) Data.BRIEF_SHOW;
    buttomContainerData = (ArrayList<ButtonBean>) temporaryArrayList.clone();
}
         也可以,直接调用它的api,原来它在这有考虑赋值,专门留了个接口。

猜你喜欢

转载自blog.csdn.net/WDYShowTime/article/details/80986421