java之坑-----List中的重複添加同一對象

java中List的add方法不檢查List中是否含有已加入項java

java中List的add方法不檢查List中是否含有已加入項測試

java中List的add方法不檢查List中是否含有已加入項spa

重要事情說三遍code

List中添加的是引用,並且不檢查是否已經加入list對象

這也就意味着:若是管理一堆循環使用的對象,對list的存放操做不該該是鏈式而應該是棧式,否則的話隨着鏈的推動實際上可供使用的對象會被擠入垃圾堆而後被回收掉,列表看起來大小變化不大可是實際上只剩很少的實際引用對象,而對該對象的任何操做(如設置可見屬性或者設置值)都會給list的使用帶來不可估量的影響blog

並且每次添加入列表,若是對於列表中的元素有惟一性要求的話(通常都有吧)須要檢查是否已經存在於列表中。開發

下附測試代碼:rem

 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:get

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

相關文章
相關標籤/搜索