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不存在的方法會對開發帶了破壞性的阻礙,所以折中選擇了一下……