一:List接口:html
子類:ArrayList LinkedListjava
特色:Unlike sets, lists typically allow duplicate elements.不像set集合,List集合容許元素重複。api
The List interface provides four methods for positional (indexed) access to list elements. Lists (like Java arrays) are zero based. List集合提供一些關於索引的訪問元素的方法,和數組同樣起始索引:0;數組
也就是說List集合是存取是有序的。好比存:11,12,13.取元素也是11,12,13.併發
List集合比對2個對象使用equals()比較。ide
也就是說以前Collection的方法,咱們能夠用精確的索引來操做。spa
1 package test09; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class List_Demo { 7 public static void main(String...args){ 8 list_test(); 9 } 10 public static void list_test(){ 11 List<Integer> li_te=new ArrayList<>(); 12 li_te.add(11); 13 li_te.add(12); 14 li_te.add(13); 15 li_te.add(14); 16 li_te.add(15); 17 li_te.add(0,99);//指定位置添加元素。 18 System.out.print(li_te); 19 li_te.remove(0);//指定位置刪除元素。 20 System.out.print(li_te); 21 Integer get_el=li_te.get(1); 22 System.out.print(get_el);//指定位置獲取元素,若是超出索引報錯誤:IndexOutOfBoundsException 23 li_te.set(0,88);//replace替換指定位置的元素。 24 System.out.print(li_te); 25 for(Integer i=0;i<li_te.size();i++){ 26 System.out.print(li_te.get(i));//使用索引進行迭代。 27 } 28 } 29 }
二:迭代器Iterator併發異常處理:.net
看以下代碼:code
1 package test09; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 public class List_It { 8 public static void main(String...args){ 9 op_It(); 10 } 11 public static void op_It(){ 12 List<String> str_list=new ArrayList<>(); 13 str_list.add("i"); 14 str_list.add("b"); 15 str_list.add("n"); 16 str_list.add("m"); 17 Iterator<String> str_it=str_list.iterator(); 18 while (str_it.hasNext()){ 19 String test_str=str_it.next(); 20 if (test_str.equals("m")){ 21 str_list.add("k"); 22 } 23 } 24 } 25 }
報以下的錯誤:htm
Exception in thread "main" java.util.ConcurrentModificationException
這是爲何呢?
這是由於在咱們使用迭代器Iterator的時候,同時對集合元素進行操做,可是迭代器並不知道集合發生變化,因此拋出如上的錯誤。
解決方法:解決併發引發的錯誤,在迭代的集合元素的時候,不要進行相關的元素操做。
或者使用listiterator方法。
ListIterator<E>
listIterator()
將如上的代碼進行修改:
1 package test09; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 import java.util.ListIterator; 7 8 public class List_It { 9 public static void main(String...args){ 10 op_It(); 11 } 12 public static void op_It(){ 13 List<String> str_list=new ArrayList<>(); 14 str_list.add("i"); 15 str_list.add("b"); 16 str_list.add("n"); 17 str_list.add("m"); 18 ListIterator<String> str_it=str_list.listIterator(); 19 while (str_it.hasNext()){ 20 if(str_it.next().equals("m")){ 21 str_it.add("222"); 22 } 23 } 24 System.out.print(str_list); 25 } 26 }
在迭代的過程當中,若是不想不引發併發異常,能夠使用ListIterator迭代器,在迭代的過程對數組的修改。只有List有這特性,由於List有索引。