List集合

来源:互联网 发布:苹果远程连接软件 编辑:程序博客网 时间:2024/06/03 17:05

一、List集合

概述:
   -List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引,
  - ArrayList:底层的数据结构使用的是数组结构(数组长度是可变的百分之五十延长)(特点是查询很快,但增删较慢)线程不同步


List集合代表一个元素有序,可重复的集合,集合中每个元素都有对应的顺序索引。List接口中增加了一些根据索引操作元素的方法:

   void add(int index,E element )  在列表的指定位置插入该元素。

   boolean addAll(int index,Collection c)  将集合c包含的所有元素都插入到List集合的index处。

   Object get(int index)    返回集合index索引出的元素。

  。。。。。详见

1.ListIterator接口:List额外提供的一个listIterator()方法,提供了专门操作List的方法。

 ListIterator接口在Iterator的基础上增加了如下方法:

 boolean hasPrevious(): 返回该迭代器关联的集合是否还有上一个元素。

 Object previous(): 返回该迭代器的上一个元素。

 void add((E e): 在指定位置插入一个元素。


注意:

在迭代时,是不可以通过集合对象的方法操作集合中的元素因为会发生ConcurrentModificationException异常(并发异常)

以,在迭代器时,只能用迭代器的方法造作元素,因为Iterator方法是有限的所以只能对元素进行判断,取出,删除的操作。

果。想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的listIterator方法获取。



 示例:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.*;
 
public class TestListIterator
{
    public static void main(String[] args)
    {
        String[] books = {
            "我是帅哥",
            "帅哥是我"
        };
        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());
        }
    }
}

 输出结果:

      我是帅哥
      帅哥是我
      ==========下面开始反向迭代===========
      -------分隔符-------
      帅哥是我
     -------分隔符-------
     我是帅哥                                       

输出完成 (耗时 0 秒) - 正常终止

2.ArrayList实现类和Vector实现类:

ArrayList和Vector是基于数组实现的list类,所以ArrayList和Vector封装了一个动态的,允许再分配的Object[]数组,不指定的话长度默认为10。ArrayList和Vector对象使用initialCapacity参数来设置该数组的长度,当向集合添加大量元素时,可以使用ensureCapac(int minCapacity)方法一次性的增加initialCapacity。

ArrayList和Vector在用法上几乎完全相同,但Vector比较古老,方法名比较长,最好是不使用。ArrayList是线程不安全的,Vector是线程安全的,但这个完全可以手动将一个ArrayList变成线程安全的。

ArrayList示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.*;
 
public class TestList
{
    public static void main(String[] args)
    {
        List books = new ArrayList();
        //向books集合中添加三个元素
        books.add(new String("轻量级J2EE企业应用实战"));
        books.add(new String("Struts2权威指南"));
        books.add(new String("基于J2EE的Ajax宝典"));
        System.out.println(books);
        //将新字符串对象插入在第二个位置
        books.add(1 new String("ROR敏捷开发最佳实践"));//add是插入,插入到当前位置,当前的元素向后退,并没有覆盖!
        for (int i = 0 ; i < books.size() ; i++ )
        {
            System.out.println(books.get(i));
        }
        System.out.println("size:"+books.size());
        //删除第三个元素
        books.remove(2);
        System.out.println(books);
        //判断指定元素在List集合中位置:输出1,表明位于第二位
        System.out.println(books.indexOf(new String("ROR敏捷开发最佳实践")));//1
        //将第二个元素替换成新的字符串对象
        books.set(1new String("Struts2权威指南"));
        System.out.println(books);
        //将books集合的第二个元素(包括)到第三个元素(不包括)截取称子集合
        System.out.println(books.subList(1 2));
 
    }
}

  输出结果:

---------- java运行 ----------
[轻量级J2EE企业应用实战, Struts2权威指南, 基于J2EE的Ajax宝典]
轻量级J2EE企业应用实战
ROR敏捷开发最佳实践
Struts2权威指南
基于J2EE的Ajax宝典
size:4
[轻量级J2EE企业应用实战, ROR敏捷开发最佳实践, 基于J2EE的Ajax宝典]
1
[轻量级J2EE企业应用实战, Struts2权威指南, 基于J2EE的Ajax宝典]
[Struts2权威指南]

输出完成 (耗时 0 秒) - 正常终止

原创粉丝点击