List接口
List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用 重复元素,可以通过索引来访问指定未位置的集合元素。因为List集合默认按元素的添加顺序设置元素的索引。List作为Colleciton接口的子接口,可以使用Collection接口里的全部方法。
程序范例:
- package TestDemo;
- import java.util.ArrayList;
- import java.util.List;
- public class Test13
- {
- public static void main(String[] args)
- {
- List books = new ArrayList();
- //添加元素
- books.add(new String("轻量级J2EE应用"));
- books.add(new String("Struts2权威指南"));
- books.add(new String("Ajax宝典"));
- System.out.println(books);
- //将新字符串对象插入在第二个位置
- books.add(1,new String("第二个位置的书"));
- for(int i = 0 ; i< books.size() ;i++)
- {
- System.out.println(books.get(i));
- }
- //删除第三个元素
- books.remove(2);
- System.out.println(books);
- //判断元素在List中的位置,输出1,在第二位
- System.out.println(books.indexOf(new String("第二个位置的书")));
- //将第二个元素替换成心得字符串对象
- books.set(1,new String("替换的元素"));
- System.out.println(books);
- //将books集合的第二个元素(包括)到第三个元素(不包括)截取成子集合
- System.out.println(books.subList(1,2));
- }
- }
- /*
- * 结果: [轻量级J2EE应用, Struts2权威指南, Ajax宝典]
- 轻量级J2EE应用
- 第二个位置的书
- Struts2权威指南
- Ajax宝典
- [轻量级J2EE应用, 第二个位置的书, Ajax宝典]
- 1
- [轻量级J2EE应用, 替换的元素, Ajax宝典]
- [替换的元素]
- * */
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的方法。
程序范例:
- package TestDemo;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.ListIterator;
- public class TestListIterator
- {
- public static void main(String[] args)
- {
- String[] books = { "Struts2权威指南","轻量级J2EE应用"};
- List bookList = new ArrayList();
- for(int i =0 ; i< books.length;i++ )
- {
- bookList.add(books[i]);
- }
- ListIterator lit = bookList.listIterator();
- while(lit.hasNext())
- {
- System.out.println(lit.next());
- lit.add("-----分隔符-----");
- }
- System.out.println("下面开始反向迭代");
- while(lit.hasPrevious())
- {
- System.out.println(lit.previous());
- }
- }
- }
- /*结果:Struts2权威指南
- 轻量级J2EE应用
- 下面开始反向迭代
- -----分隔符-----
- 轻量级J2EE应用
- -----分隔符-----
- Struts2权威指南
- *
- * */
ArrayList和Vector实现类
ArrayList和Vector作为List类的两个典型实现,完全支持List接口的全部功能。
ArrayList和Vector类都是基于数组实现的List类。ArrayList和Vector的显著区别:
ArrayList是线程不安全的,必须手动保证该集合的同步性。
Vector集合则是线程安全的,无序程序保证该集合的同步性 (不推荐使用Vector,有许多缺点) Vector提供了一个Stack子类,模拟“栈”这种数据结构。此外,List还有一个LinkedList的实现,他是一个基于链表实现的List类,对于顺序访问集合中的元素进行了优化,特别是当插入,删除元素时速度非常快。
固定长度的List
Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里的元素,不可增加,删除该集合里
的元素。- package TestDemo;
- import java.util.Arrays;
- import java.util.List;
- public class FixedSizeList
- {
- public static void main(String[] args)
- {
- //操作数组的工具类:Arrays,该工具类里提供了asList(Object...a)方法,
- //该方法吧一个数组或指定个数的对象转换成一个List集合,这个集合是Arrays
- //的内部类ArrayList的实例。
- List fixedList = Arrays.asList("Struts2权威指南","最佳实践");
- //获取fixedList的实现类,将输出Array$ rrayList
- System.out.println(fixedList.getClass());
- //遍历fixedList的集合元素
- for(int i =0;i< fixedList.size() ;i++)
- {
- System.out.println(fixedList.get(i));
- }
- //试图增加或删除元素都将引发UnsupportedOperationException异常
- }
- }
- /*结果:class java.util.Arrays$ArrayList
- Struts2权威指南
- 最佳实践
- *
- * */