No.3.2 LinkedList鏈表集合

鏈表

這里首先解釋一下什么是鏈表:
(1)鏈表是一種數(shù)據(jù)結(jié)構(gòu)懂诗;
(2)鏈表中的節(jié)點(diǎn)擁有指向另一個(gè)節(jié)點(diǎn)的數(shù)據(jù)值赢乓;
(3)如果一個(gè)節(jié)點(diǎn)擁有指向后繼節(jié)點(diǎn)的引用,這樣的鏈表稱為單向鏈表年枕;如果擁有指向前繼節(jié)點(diǎn)的引用和后繼結(jié)點(diǎn)的引用,那么這個(gè)鏈表就是雙向鏈表乎完;

LinkedList鏈表集合:

(1)LinkedList直接實(shí)現(xiàn)了Deque(雙向隊(duì)列)接口熏兄、Deque接口繼承了Queue(隊(duì)列)、使其可以作為雙向鏈表這種數(shù)據(jù)結(jié)構(gòu)來(lái)使用树姨、操作元素摩桶。
(2)LinkedList以鏈表的形式存儲(chǔ)數(shù)據(jù)、對(duì)增刪元素有很高的效率帽揪、查詢效率較低硝清、尤其是隨機(jī)訪問(wèn)、效率不忍直視转晰。
(3)使用輸出輸入流對(duì)LinkedList進(jìn)行讀寫時(shí)候芦拿;會(huì)先講LinkedList的capacity讀取/寫入到流中、然后將元素一一讀取/寫入查邢。
(4)堆棧和隊(duì)列都可以 用鏈表數(shù)據(jù)結(jié)構(gòu)來(lái)描述蔗崎;
(5)LinkedList不同于ArrayList和Vector集合類之處在于,他能根據(jù)任意一個(gè)元素獲取他的前一個(gè)后一個(gè)元素扰藕。

LinkedList特有的方法:

  • 增:
    (1)void addFirst(E object) 添加一個(gè)元素到鏈表的最首部缓苛;
    (2)void addLast(E object) 添加一個(gè)元素到鏈表的最尾部;
    (3)boolean offer(E o) 添加一個(gè)元素到鏈表的最尾部邓深;
    (4)boolean offerFirst(E e) 添加一個(gè)元素到鏈表的最首部
    (5)boolean offerLast(E e) 添加一個(gè)元素到鏈表的最尾部未桥;
    (6)void push(E e) 添加一個(gè)元素到鏈表的最首部;

  • 查:
    (1)E get(int index) 返回鏈表的第index位的元素芥备;
    (2)E getFirst() 返回鏈表的第一個(gè)元素钢属;
    (3)E getLast() 返回鏈表的最后一個(gè)元素;
    (4)E peek() 返回鏈表的第一個(gè)元素门躯;
    (5)E peekFirst() 返回鏈表的第一個(gè)元素淆党;
    (6)E peekLast() 返回鏈表的最后一個(gè)元素;
    注意這里沒(méi)有g(shù)et(Object o)方法

  • 刪:
    (1)E poll() 返回鏈表的第一個(gè)元素并刪除這個(gè)元素讶凉;
    (2)E pollFirst() 返回鏈表的第一個(gè)元素并刪除這個(gè)元素染乌;
    (3)E pollLast() 返回鏈表的最后一個(gè)元素并刪除這個(gè)元素;
    (4)E pop() 返回鏈表的第一個(gè)元素并刪除這個(gè)元素懂讯;
    (5)boolean removeFirstOccurrence(Object o)荷憋;刪除鏈表中第一個(gè)o元素;
    (6)boolean removeLastOccurrence(Object o);刪除鏈表中最后一個(gè)o元素褐望;

  • Iterator/ListIterator
    對(duì)于所有的List集合都擁有這兩個(gè)迭代器方法勒庄;
    但是對(duì)于LinkedList集合類串前,他提供了這兩個(gè)迭代器特有的方法;
    (1)Iterator<E> descendingIterator() 实蔽;返回一個(gè)Iterator迭代器荡碾,這個(gè)迭代器迭代的方法是從最后一個(gè)元素向前開始迭代;API的解釋是“Returns an iterator over the elements in this deque in reverse (反轉(zhuǎn))sequential order.”
    (2)提供了一個(gè)特有的ListIterator構(gòu)造函數(shù):ListIterator<E> listIterator(int index)局装;這個(gè)迭代器坛吁,可以從集合的index角標(biāo)元素開始迭代,迭代方法可以是向后hasNext()铐尚,和向前hasPervious()拨脉;

  • 迭代LinkedList的方法:

    public class LinkedListDemo {
      public static void main(String[] args) {
        LinkedList<Integer> link = new LinkedList<>();
        link.add(1);//尾部
        link.push(2);//首部
        link.offer(3);//尾部
        System.out.println("----------使用listItertor從后往前迭代---------------");
        listItertor_Method_1(link);
        System.out.println("----------使用listItertor從前往后迭代----------------");
        listItertor_Method_2(link);//從前往后迭代
        System.out.println("----------用Itertor從后往前迭代---------------");
        Itertor_Method_1(link);
        System.out.println("----------用Itertor從前往后迭代---------------");
        Itertor_Method_2(link);
    }
    public static void listItertor_Method_1(LinkedList list){
      System.out.print("listIterator use pervious:  ");
      //設(shè)置從鏈表尾部進(jìn)行迭代:
      for(ListIterator it = list.listIterator(list.size());it.hasPrevious();){
          System.out.print(it.previous() +" ");
      }
      System.out.println();
    }
    public static void listItertor_Method_2(LinkedList list){
      System.out.print("listIterator use next:  ");
      //設(shè)置從鏈表尾部進(jìn)行迭代:
      for(ListIterator it = list.listIterator();it.hasNext();){
          System.out.print(it.next() +" ");
      }
      System.out.println();
    }
    public static void Itertor_Method_1(LinkedList list){
      System.out.print("Iterator use descendingIterator: ");
      for(Iterator it = list.descendingIterator();it.hasNext();){
          System.out.print( it.next()+ " ");
      }
      System.out.println();
    }
    public static void Itertor_Method_2(LinkedList list){
      System.out.print("Iterator use iterator:  ");
      for(Iterator it = list.iterator();it.hasNext();){
          System.out.print(it.next() + " ");
      }
      System.out.println();
    }
      }
    

總結(jié):

LinkedList提供了眾多的增刪操作,實(shí)際應(yīng)用中我們可能使用不了這么多方法宣增,當(dāng)時(shí)我們可以根據(jù)返回值玫膀,操作對(duì)象是堆還是隊(duì)列,來(lái)選擇特定的方法爹脾;
模擬隊(duì)列先進(jìn)先出模式:

public class DuiLie {
  private LinkedList list;

public DuiLie(){
    list = new LinkedList();
}

public void myGet(){
    System.out.println(list.peek());
}
public void myPut(Object o){
    list.addLast(o);
}
public boolean isNull(){
    return list.isEmpty();
}
}

模擬堆:先進(jìn)后出

public class Dui {
private LinkedList list ;
public Dui(){
    list = new LinkedList();
}
public void myGet(){
    System.out.println(list.getLast());
}
public void myPut(Object o){
    list.addLast(o);
}
public boolean isNull(){
    return list.isEmpty();
}
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帖旨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子誉简,更是在濱河造成了極大的恐慌,老刑警劉巖盟广,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闷串,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡筋量,警方通過(guò)查閱死者的電腦和手機(jī)烹吵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桨武,“玉大人肋拔,你說(shuō)我怎么就攤上這事⊙剿幔” “怎么了凉蜂?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)性誉。 經(jīng)常有香客問(wèn)我窿吩,道長(zhǎng),這世上最難降的妖魔是什么错览? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任纫雁,我火速辦了婚禮,結(jié)果婚禮上倾哺,老公的妹妹穿的比我還像新娘轧邪。我一直安慰自己刽脖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布忌愚。 她就那樣靜靜地躺著曲管,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菜循。 梳的紋絲不亂的頭發(fā)上翘地,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音癌幕,去河邊找鬼衙耕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛勺远,可吹牛的內(nèi)容都是我干的橙喘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胶逢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼厅瞎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起初坠,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤和簸,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后碟刺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锁保,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年半沽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了爽柒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡者填,死狀恐怖浩村,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情占哟,我是刑警寧澤心墅,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站榨乎,受9級(jí)特大地震影響嗓化,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谬哀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一刺覆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧史煎,春花似錦谦屑、人聲如沸驳糯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酝枢。三九已至,卻和暖如春悍手,著一層夾襖步出監(jiān)牢的瞬間帘睦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工坦康, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竣付,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓滞欠,卻偏偏與公主長(zhǎng)得像古胆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子筛璧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Collection接口 Collection接口是所有集合的祖先類逸绎。他有兩個(gè)構(gòu)造方法,一個(gè)無(wú)參構(gòu)造夭谤,一個(gè)是帶Co...
    夜幕繁華閱讀 593評(píng)論 0 0
  • Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子棺牧,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子...
    趙宇_阿特奇閱讀 1,869評(píng)論 0 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法朗儒,類相關(guān)的語(yǔ)法颊乘,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法采蚀,異常的語(yǔ)法疲牵,線程的語(yǔ)...
    子非魚_t_閱讀 31,632評(píng)論 18 399
  • java筆記第一天 == 和 equals ==比較的比較的是兩個(gè)變量的值是否相等承二,對(duì)于引用型變量表示的是兩個(gè)變量...
    jmychou閱讀 1,497評(píng)論 0 3
  • 一榆鼠,微商朋友圈基礎(chǔ)設(shè)置 二,微商前兩個(gè)月應(yīng)該重點(diǎn)做什么亥鸠? 三妆够,到第一批貨后應(yīng)該怎么樣做? 四负蚊,下載重要的美圖APP...
    佰拉麗品牌護(hù)膚小夢(mèng)家閱讀 2,973評(píng)論 0 1