一: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有索引。