标签:
java中List的add方法不检查List中是否含有已加入项
java中List的add方法不检查List中是否含有已加入项
java中List的add方法不检查List中是否含有已加入项
重要事情说三遍
List中添加的是引用,而且不检查是否已经加入list
这也就意味着:如果管理一堆循环使用的对象,对list的存放操作不应该是链式而应该是栈式,不然的话随着链的推进实际上可供使用的对象会被挤入垃圾堆然后被回收掉,列表看起来大小变化不大但是实际上只剩不多的实际引用对象,而对该对象的任何操作(如设置可见属性或者设置值)都会给list的使用带来不可估量的影响
而且每次添加入列表,如果对于列表中的元素有唯一性要求的话(一般都有吧)需要检查是否已经存在于列表中。
下附测试代码:
1 fucker b = new fucker(); 2 fucker a = new fucker(); 3 a.Oops(); 4 b.Oops(); 5 6 List<fucker> lbs = new ArrayList<>(); 7 8 for (int i= 0;i<10;i++) { 9 lbs.add(a); 10 lbs.add(b); 11 } 12 13 a.fuck(); 14 for (int i=0;i<10;i++) { 15 lbs.get(0).fuck(); 16 lbs.remove(lbs.get(0)); 17 lbs.get(0).fuck(); 18 lbs.remove(lbs.get(0)); 19 }
fucker:
1 public class fucker { 2 private int value=0; 3 4 public void fuck() { 5 System.out.println("OOOO!"); 6 System.out.println(value); 7 value = 0; 8 } 9 10 public void Oops() { 11 value = 1; 12 System.out.println("Changed!"); 13 } 14 15 }
其实一般来说这种对象应该是不用管理的,但是师兄不信任java的垃圾回收机制,而我坚信他setVisible(View.Gone)便以为view不存在的方法会对开发带了破坏性的阻碍,所以折中选择了一下……
标签:
原文地址:http://www.cnblogs.com/SproutFicF/p/4609055.html