#Zeroから始めるJava#Java學習筆記(2020/2/13)

1.List集合接口:

允許存在重復元素蒸播,有序的集合进每,存儲先后決定存儲順序
public void add(int index, E element) : 將指定的元素歉闰,添加到該集合中的指定位置上装悲。
\color{red}{原來index下標所在元素以及其后的元素都會自動后移留出位置來椅您。}
List接口的實現(xiàn)類:ArrayList贱除、LinkedList生闲。
ArrayList集合:底層是數(shù)組,查找快月幌、增刪慢
LinkedList集合:底層是鏈表跪腹,查找慢、增刪快

2.關于 數(shù)組飞醉,鏈表冲茸,棧,隊列之間的關系

棧和隊列是偏向于描述存让辶薄(操作)結構轴术,數(shù)組和鏈表是偏向于描述存儲結構
\color{red}{棧和隊列都可以用數(shù)組實現(xiàn),也都可以用鏈表實現(xiàn)钦无!}

3.LinkedList的pop和push方法

在效果上逗栽,pop方法與removeFirst方法一樣
在效果上,push方法與addFirst方法一樣
所以失暂,Linkedlist對象的第一個元素相當于堆棧的頂部彼宠。

4.Set接口(java.util.Set)

特點:
1.不允許重復元素
2.沒有索引,所以不能使用普通的for循環(huán)遍歷

\color{red}{可以使用迭代器弟塞、增強for循環(huán)遍歷}

5.Set接口的實現(xiàn)類:HashSet類

1.不允許重復元素
2.沒有索引凭峡,所以不能使用普通的for循環(huán)遍歷
3.存儲順序跟放入的次序無關,是隨機的
4.底層是一個哈希表結構

6.hashcode相同一定是一個元素嗎决记?

答案是否摧冀、因為hashcode是一個邏輯地址,而不是物理地址。
若未重寫hashCode方法索昂,Object類中的hashCode方法就讓系統(tǒng)隨機給一個值

7.java中解決hashcode沖突問題是用的鏈地址法

\color{red}{Java 1.8之后建车,如果鏈表長度超過了8,則自動變成紅黑樹椒惨,因為鏈表查詢很垃圾}

8.內存地址缤至、hash地址、==康谆、equals方法的關系

    public static void main(String[] args) {
        String str1 = "abc";
        String str2 = "abc";
        String str3 = new String("abc");
        String str4 = new String("abc");
        System.out.println("物理地址:");
        System.out.println(System.identityHashCode(str1));  //1355531311
        System.out.println(System.identityHashCode(str2));  //1355531311
        System.out.println(System.identityHashCode(str3));  //1967205423
        System.out.println(System.identityHashCode(str4));  //42121758
        System.out.println(str1 == str2);   //true
        System.out.println(str1 == str3);   //false
        System.out.println(str1 == str4);   //false
        System.out.println(str3 == str4);   //false
        System.out.println(str1.equals(str2));   //true
        System.out.println(str1.equals(str3));   //true
        System.out.println(str1.equals(str4));   //true
        System.out.println(str3.equals(str4));   //true
        System.out.println("Hash地址:");
        System.out.println(str1.hashCode());    //96354
        System.out.println(str2.hashCode());    //96354
        System.out.println(str3.hashCode());    //96354
        System.out.println(str4.hashCode());    //96354
    }

由此可見:
1.== 是根據(jù)物理地址來比較的领斥,也即物理地址是否相同,也就是對象在堆中的地址秉宿,是判斷是不是同一個對象的依據(jù)。
2.Object類的equals方法是使用“==”來比較是否是一個對象屯碴,比較物理地址

//Object類中的equals方法
public boolean equals(Object obj) {
        return (this == obj);
    }

String內重寫的equals方法是來比較內容是否相同

//String類的equals方法
 public boolean equals(Object anObject) {  //多態(tài)傳遞參數(shù)
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;  //向下轉為String類型
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
    }

9.字符串的拼接問題

    public static void main(String[] args) {
        String a = "a";
        String b = "b";
        String c = a + b;
        String d = "ab";
        String e = "a" + "b";
        System.out.println(System.identityHashCode(c)); //142666848
        System.out.println(System.identityHashCode(d)); //1060830840
        System.out.println(System.identityHashCode(e)); //1060830840
        System.out.println(c == d); //false
        System.out.println(e == d); //true
    }

1.使用字符串常量+字符串常量 是在字符串常量池中找有沒有存在相應字符串描睦,若存在變量名存儲該地址就好
2.使用字符串變量+字符串常量是創(chuàng)建一個新對象,所以雖然內容相同但是地址會不同

10.Set集合存儲元素唯一的原理

第一步导而、調用hashCode方法忱叭、先判斷hashcode是不是相同,若不同則存入今艺。
第二步韵丑、若相同,再調用equals方法判斷內容是不是相同虚缎,若相同則判斷是同一個元素撵彻。
想要自定義判斷是不是一個元素,可以重寫equals方法和hashCode方法实牡。
\color{red}{注意:雖說判定了是同一個元素陌僵,但是可能不是同一個對象。}
\color{red}{因為這里的判斷標準是我們自己制定的创坞,而不一定是用==來比較}

11.可變參數(shù):確定了參數(shù)類型碗短,但不知道傳幾個時可以用可變參數(shù)列表

修飾符 返回值類型 方法名(參數(shù)類型... 形參名){ }
等同于:
修飾符 返回值類型 方法名(參數(shù)類型[] 形參名){ }

\color{red}{可變參數(shù)的優(yōu)點:}
不用傳遞數(shù)組,直接傳數(shù)據(jù)即可题涨,底層會生成一個數(shù)組來存儲傳遞的數(shù)據(jù)

終極寫法:
修飾符 返回值類型 方法名(Object... 形參名){ }偎谁、多態(tài)、Object類型可以接受任何類型數(shù)據(jù)纲堵。

\color{red}{注意點:}
\color{red}{1:一個參數(shù)列表中巡雨,可變參數(shù)只能有一個}
\color{red}{2:若還有其他參數(shù),則可變參數(shù)必須寫在最后}

13.HashSet集合保證了元素的唯一席函,但是卻是無序的鸯隅,其子類LinkedHashSet 中存儲是有序的。

14.Collections工具類的sort靜態(tài)方法。

public static <T> void sort(List<T> list) :將集合中元素按照默認規(guī)則排序蝌以。
可以自己定義排序方式炕舵,在類中實現(xiàn)Comparable<E>接口,重寫compareTo(T o)方法

public class Person implements Comparable<Person>{
    private String name;
    private int age;
 @Override
    //返回負整數(shù)跟畅、零或正整數(shù)咽筋,根據(jù)此對象是小于、等于還是大于指定對象徊件。
    //按照年齡排序
    public int compareTo(Person o) {
//        return age-o.getAge();  //增序
        return o.getAge()- age; //降序
    }
}

public static <T> void sort(List<T> list奸攻,Comparator<? super T> )將集合中元素按照指定規(guī)則排序。
也就是自己用匿名內部類去實現(xiàn)接口中的排序方法

\color{red}{ps:<? super T>是受限泛型虱痕,意思是只能接收T類型的本身或者其父類}

Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;   //減序
//                return o1-o2;   //增序
            }
        });

16睹耐、Collections工具類的其他靜態(tài)方法

public static <T> boolean addAll(Collection<T> c, T... elements) :
往集合中添加一些元素。


public static void shuffle(List<?> list)
打亂順序 :打亂集合順序部翘。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末硝训,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子新思,更是在濱河造成了極大的恐慌窖梁,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夹囚,死亡現(xiàn)場離奇詭異纵刘,居然都是意外死亡,警方通過查閱死者的電腦和手機荸哟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門假哎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鞍历,你說我怎么就攤上這事位谋。” “怎么了堰燎?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵掏父,是天一觀的道長。 經常有香客問我秆剪,道長赊淑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任仅讽,我火速辦了婚禮陶缺,結果婚禮上,老公的妹妹穿的比我還像新娘洁灵。我一直安慰自己饱岸,他們只是感情好掺出,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苫费,像睡著了一般汤锨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上百框,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天闲礼,我揣著相機與錄音,去河邊找鬼铐维。 笑死柬泽,一個胖子當著我的面吹牛,可吹牛的內容都是我干的嫁蛇。 我是一名探鬼主播锨并,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼睬棚!你這毒婦竟也來了第煮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤闸拿,失蹤者是張志新(化名)和其女友劉穎空盼,沒想到半個月后书幕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體新荤,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年台汇,在試婚紗的時候發(fā)現(xiàn)自己被綠了苛骨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡苟呐,死狀恐怖痒芝,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情牵素,我是刑警寧澤严衬,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站笆呆,受9級特大地震影響请琳,放射性物質發(fā)生泄漏。R本人自食惡果不足惜赠幕,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一俄精、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榕堰,春花似錦竖慧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踱讨。三九已至,卻和暖如春碳胳,著一層夾襖步出監(jiān)牢的瞬間勇蝙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工挨约, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留味混,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓诫惭,卻偏偏與公主長得像翁锡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子夕土,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353