for(Catalogue catalogue : AppCatalogue.catalogues)
{
catalogue.secondCatalogues.clear();
}AppCatalogue.catalogues 是一个静态Vector<Catalogue>, 当我执行catalogue.secondCatalogues.clear();时发现AppCatalogue.catalogues下catalogue 的secondCatalogues也被clear了。然后我用一个容器Vector<Catalogue> all = new Vector<Catalogue>();执行all.addAll(AppCatalogue.catalogues) 最后将代码改为:
for(Catalogue catalogue : all)
{
catalogue.secondCatalogues.clear();
}结果还是清除了AppCatalogue.catalogues下catalogue 的secondCatalogues属性,求解是怎么回事?
如何才能不清除掉AppCatalogue.catalogues下的一切数据?
{
catalogue.secondCatalogues.clear();
}AppCatalogue.catalogues 是一个静态Vector<Catalogue>, 当我执行catalogue.secondCatalogues.clear();时发现AppCatalogue.catalogues下catalogue 的secondCatalogues也被clear了。然后我用一个容器Vector<Catalogue> all = new Vector<Catalogue>();执行all.addAll(AppCatalogue.catalogues) 最后将代码改为:
for(Catalogue catalogue : all)
{
catalogue.secondCatalogues.clear();
}结果还是清除了AppCatalogue.catalogues下catalogue 的secondCatalogues属性,求解是怎么回事?
如何才能不清除掉AppCatalogue.catalogues下的一切数据?
这种情况,debug能帮你吧
我感觉楼主前后矛盾了第1处标红色字体的地方"catalogue.secondCatalogues.clear()"放在循环里 这句话的作用不就是clear容器中的所有secondCatalogues属性吗? 对象是引用传递我猜猜楼主的意图 楼主是想取出容器中每一个catalogue 赋值给一个Catalogue对象 这个对象可以.secondCatalogues.clear();操作 但不影响原容器中的每一个catalogues
如果是这样的话 楼主可以看看Object()中的clone()方法
我感觉楼主前后矛盾了第1处标红色字体的地方"catalogue.secondCatalogues.clear()"放在循环里 这句话的作用不就是clear容器中的所有secondCatalogues属性吗? 对象是引用传递我猜猜楼主的意图 楼主是想取出容器中每一个catalogue 赋值给一个Catalogue对象 这个对象可以.secondCatalogues.clear();操作 但不影响原容器中的每一个catalogues
如果是这样的话 楼主可以看看Object()中的clone()方法
谢谢我就是这个意思,不改变原容器的任何东西,因为我执行clear的时候同时也清除了原容器的secondCatalogues。 不过我复制一份数据all = (Vector<Catalogue>) AppCatalog.catalogues.clone();
然后再: for(Catalogue catalogue : all)
{
catalogue.secondCatalogues.clear();
}
还是和原来一样的效果,原AppCatalog.catalogues的secondCatalogues还是被清除了。
它只是告诉内存管理机制,老子不用它的时候,你也必须把它留着,老子告诉你清空的时候再清空。
这可以避免过度的内存读写操作。要真的赋值的话,就必须老老实实的用赋值的方法。Clone()的方法,没有具体研究过,高人来说明下。
我的理解是,Clone其实,只是在这种情况下,重新建立了AppCatalog.catalogues的所有地址。越土的方法,越有用,而且,更加稳定,速度更快。
要让程序进化,就要使用各种算法,进行优化,提升速度。
用的方法尽量老土化。