List接口


 List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用
重复元素,可以通过索引来访问指定未位置的集合元素。因为List集合默认按元素的添加顺序设置元素的索引。

List作为Colleciton接口的子接口,可以使用Collection接口里的全部方法。

程序范例:

 

 
  
  1. package TestDemo;  
  2.  
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.  
  6. public class Test13  
  7. {  
  8.     public static void main(String[] args)  
  9.     {  
  10.         List books = new ArrayList();  
  11.         //添加元素  
  12.         books.add(new String("轻量级J2EE应用"));  
  13.         books.add(new String("Struts2权威指南"));  
  14.         books.add(new String("Ajax宝典"));  
  15.         System.out.println(books);  
  16.         //将新字符串对象插入在第二个位置  
  17.         books.add(1,new String("第二个位置的书"));  
  18.         for(int i = 0 ; i< books.size() ;i++)  
  19.         {  
  20.             System.out.println(books.get(i));  
  21.         }     
  22.         //删除第三个元素  
  23.         books.remove(2);  
  24.         System.out.println(books);  
  25.         //判断元素在List中的位置,输出1,在第二位  
  26.         System.out.println(books.indexOf(new String("第二个位置的书")));  
  27.         //将第二个元素替换成心得字符串对象  
  28.         books.set(1,new String("替换的元素"));  
  29.         System.out.println(books);  
  30.         //将books集合的第二个元素(包括)到第三个元素(不包括)截取成子集合  
  31.         System.out.println(books.subList(1,2));  
  32.     }     
  33. }  
  34. /*  
  35.  * 结果:       [轻量级J2EE应用, Struts2权威指南, Ajax宝典]  
  36.             轻量级J2EE应用  
  37.             第二个位置的书  
  38.             Struts2权威指南  
  39.             Ajax宝典  
  40.             [轻量级J2EE应用, 第二个位置的书, Ajax宝典]  
  41.             1  
  42.             [轻量级J2EE应用, 替换的元素, Ajax宝典]  
  43.             [替换的元素]  
  44.  * */ 

       List集合可以根据位置索引来访问集合中的元素,因此List增加了一种心得遍历集合元素的方法:使用普通for循环来遍历集合元素。

List判断两个对象相等只要用过equals方法比较返回true即可。程序是试图删除一个对象,List会调用该对象的equals方法依次与集合元素进行比较,如果该equals方法以某个集合元素作为参数时返回true,List将会删除该元素。

       List的set(int index,Object element)方法来改变List集合指定索引处的元素,但不会改变List集合的长度。与Set只提供一个iterator()方法不同,List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作list的方法。

程序范例:

 
  
  1. package TestDemo;  
  2.  
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. import java.util.ListIterator;  
  6.  
  7. public class TestListIterator   
  8. {  
  9.     public static void main(String[] args)  
  10.     {  
  11.         String[] books = {"Struts2权威指南","轻量级J2EE应用"};  
  12.         List bookList = new ArrayList();  
  13.         for(int i =0 ; i< books.length;i++ )  
  14.         {  
  15.             bookList.add(books[i]);  
  16.         }  
  17.         ListIterator lit = bookList.listIterator();  
  18.         while(lit.hasNext())  
  19.         {  
  20.             System.out.println(lit.next());  
  21.             lit.add("-----分隔符-----");  
  22.         }  
  23.         System.out.println("下面开始反向迭代");  
  24.         while(lit.hasPrevious())  
  25.         {  
  26.             System.out.println(lit.previous());  
  27.         }  
  28.     }  
  29. }  
  30. /*结果:Struts2权威指南  
  31.         轻量级J2EE应用  
  32.         下面开始反向迭代  
  33.         -----分隔符-----  
  34.         轻量级J2EE应用  
  35.         -----分隔符-----  
  36.         Struts2权威指南  
  37.  *   
  38.  * */ 

 

ArrayList和Vector实现类


 ArrayList和Vector作为List类的两个典型实现,完全支持List接口的全部功能。
 ArrayList和Vector类都是基于数组实现的List类。

ArrayList和Vector的显著区别:

                                            ArrayList是线程不安全的,必须手动保证该集合的同步性。
                                            Vector集合则是线程安全的,无序程序保证该集合的同步性
                                         (不推荐使用Vector,有许多缺点)


Vector提供了一个Stack子类,模拟“栈”这种数据结构。此外,List还有一个LinkedList的实现,他是一个基于链表实现的List类,对于顺序访问集合中的元素进行了优化,特别是当插入,删除元素时速度非常快。

 

固定长度的List

Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里的元素,不可增加,删除该集合里
的元素。

 
  
  1. package TestDemo;  
  2.  
  3. import java.util.Arrays;  
  4. import java.util.List;  
  5.  
  6. public class FixedSizeList   
  7. {  
  8.     public static void main(String[] args)  
  9.     {  
  10.         //操作数组的工具类:Arrays,该工具类里提供了asList(Object...a)方法,  
  11.         //该方法吧一个数组或指定个数的对象转换成一个List集合,这个集合是Arrays  
  12.         //的内部类ArrayList的实例。  
  13.         List fixedList = Arrays.asList("Struts2权威指南","最佳实践");  
  14.         //获取fixedList的实现类,将输出Array$ rrayList  
  15.         System.out.println(fixedList.getClass());  
  16.         //遍历fixedList的集合元素  
  17.         for(int i =0;i< fixedList.size() ;i++)  
  18.         {  
  19.             System.out.println(fixedList.get(i));  
  20.         }  
  21.         //试图增加或删除元素都将引发UnsupportedOperationException异常  
  22.     }  
  23. }  
  24. /*结果:class java.util.Arrays$ArrayList  
  25.         Struts2权威指南  
  26.         最佳实践  
  27.  *   
  28.  * */