當前位置:編程學習大全網 - 源碼下載 - java linked list裏的元素順序反過來

java linked list裏的元素順序反過來

定義壹個LinkedList<Integer> templist = new LinkedList<>();來存儲list裏面的值,通過叠代list,將值插入在templist的頭上,那麽templist就是list的反轉了,最後將templist賦值給list就行了!

如下代碼:

public?void?reverse()?{

LinkedList<Integer>?list?=?new?LinkedList<>();

LinkedList<Integer>?templist?=?new?LinkedList<>();

int?i?=?0;

while?(i?<?6)?{

list.add(i);

i++;

}

Iterator<Integer>?it?=?list.iterator();

int?m;

while?(it.hasNext()?&&?i?>=?0)?{

m?=?it.next();

templist.addFirst(m);

i--;

}

list?=?templist;

System.out.println(list);

}

運行結果為:

5 4 3 2 1 0

從API中可以看到List等Collection的實現並沒有同步化,如果在多線程應用程序中出現同時訪問,而且出現修改操作的時候都要求外部操作同步化;調用Iterator操作獲得的Iterator對象在多線程修改Set的時候也自動失效,並拋出java.util.ConcurrentModificationException。這種實現機制是fail-fast,對外部的修改並不能提供任何保證。

Iterator是工作在壹個獨立的線程中,並且擁有壹個 mutex鎖,就是說Iterator在工作的時候,是不允許被叠代的對象被改變的。

Iterator被創建的時候,建立了壹個內存索引表(單鏈表),這個索引表指向原來的對象,當原來的對象數量改變的時候,這個索引表的內容沒有同步改變,所以當索引指針往下移動的時候,便找不到要叠代的對象,於是產生錯誤。

List、Set等是動態的,可變對象數量的數據結構,但是Iterator則是單向不可變,只能順序讀取,不能逆序操作的數據結構,當 Iterator指向的原始數據發生變化時,Iterator自己就迷失了方向。

所以如果像下面這麽寫就會拋出異常java.util.ConcurrentModificationException

public?void?reverse()?{

LinkedList<Integer>?list?=?new?LinkedList<>();

int?i?=?0;

while?(i?<?6)?{

list.add(i);

i++;

}

Iterator<Integer>?it?=?list.iterator();

int?m;

while?(it.hasNext()?&&?i?>=?0)?{

m?=?it.next();

list.add(m);

list.remove(0);

i--;

}

System.out.println(list);

}

  • 上一篇:Python為什麽采用基於值的內存管理模型?
  • 下一篇:濰坊醫學院招生代碼
  • copyright 2024編程學習大全網