亚洲精品亚洲人成在线观看麻豆,在线欧美视频一区,亚洲国产精品一区二区动图,色综合久久丁香婷婷

              當前位置:首頁 > IT技術 > 其他 > 正文

              關于ArrayList 中子方法 -- contains 疑惑解決
              2022-05-31 17:19:29


              寫之前先看下 ArrayList 子函數 contains 的Api 怎么介紹:

              ?

              ??boolean??

              ??contains(Object?o)??

              ??????????如果此列表中包含指定的元素,則返回 true。

              先看個字面意思過過眼就好了 哈哈哈

              然之后 我們上實例見 問題:(詳看注釋)

              import?java.util.ArrayList;
              import?java.util.List;

              public?class?Main?{

              ????public?static?void?main(String[]?args)?{
              ????????List?list?=?new?ArrayList();
              ????????Person?person_sl?=?new?Person("張三",10);????//Person類無重新寫equals
              ????????list.add(person_sl);
              ????????System.out.println(list.contains(person_sl));???//true
              ????????System.out.println(list.contains(?new?Person("張三",10)));?//false


              ????????list.add("a");
              ????????String?str_a?=?new?String("a");

              ????????System.out.println(list.contains("a"));?//true
              ????????System.out.println(list.contains(str_a));???//true?????不是說好比的是地址嘛?
              ????}
              }

              哎 前頭比的是地址 怎么后頭兩個地址不一樣的字符串都為true了????

              別急:我們跟蹤進去看看:

              ?

              跟進去發(fā)現他是ArrayList 重寫父接口的 那么 看下他怎么重寫的:

              public?boolean?contains(Object?o)?{
              ????return?indexOf(o)?>=?0;
              }

              一看! 哎! 好家伙! 原來是用 indexof 來找的,那么我們在跟蹤進去看看 他 indexof 是怎么實現是:

              public?int?indexOf(Object?o)?{
              ????if?(o?==?null)?{
              ????????for?(int?i?=?0;?i?<?size;?i++)
              ????????????if?(elementData[i]==null)
              ????????????????return?i;
              ????}?else?{
              ????????for?(int?i?=?0;?i?<?size;?i++)
              ????????????if?(o.equals(elementData[i]))
              ????????????????return?i;
              ????}
              ????return?-1;
              }

                好家伙 這下明白了吧 :除了null之外? 他都是用 equals 來判斷的:

                那么就懂了:

                我前面已滿俠伏筆 說: 無重寫 equals ,所以啊 他默認比的是地址

                因為String類 它重寫了equals? 無論如何 它比的都是 內容 ,這下真相大白了!

                所 你完全可以在自己類重寫任何object 的方法,這個設計到面向對象了!

              ?

              ?

                謝謝大家看到這里 希望能幫到小白和疑惑人群,謝謝!

               

                -----年年花相似? 歲歲人不同-----


              作者:??咸瑜???


              本文摘自 :https://blog.51cto.com/u

              開通會員,享受整站包年服務立即開通 >