A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© IT_JM 中级黑马   /  2013-10-10 08:53  /  905 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第三讲     List
一、List
组成
        List:元素是有序的,元素可以重复。因为该集合体系有索引。
            |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
            |--LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢。
            |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。
二、List的特有方法
        凡是可以操作角标的方法都是该体系特有的方法。
1、增
        booleanadd(index,element);//指定位置添加元素
        BooleanaddAll(index,Collection);//在指定位置增加给定集合中的所有元素,若省略位置参数,则在当前集合的后面依次添加元素
2、删
        Booleanremove(index);//删除指定位置的元素
3、改
        set(index,element);//修改指定位置的元素。
4、查
        get(index);//通过角标获取元素
        subList(from,to);//获取部分对象元素
5、其他
        listIterator();//List特有的迭代器
        indexOf(obj);//获取元素第一次出现的位置,如果没有则返回-1
注:List集合判断元素是否相同,移除等操作,依据的是元素的equals方法。
三、ListIterator
1、概述
        ListIterator是List集合特有的迭代器,是Iterator的子接口。
       在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。所以在迭代器时,只能用迭代器的方法操作元素。可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作。如果想要其他的操作,如添加、修改等,就需要使用其子接口:ListIterrator。该接口只能通过List集合的ListIterator方法获取。
2、ListIterator特有的方法
        add(obj);//增加
        set(obj);//修改为obj
        hasPrevious();//判断前面有没有元素
        previous();//取前一个元素
四、枚举Enumeration
枚举:
        就是Vector特有的取出方式。Vector有三种取出方式。
        其实枚举和迭代是一样的。因为枚举的名称以及方法的名称都过长。所以被迭代器取代了。
特有方法:
         addElement(obj);//添加元素,相当于add(obj);
         Enumerationelements();//Vector特有取出方式(枚举)
         hasMoreElements();//相当于Iterator的hasNext()方法
         nextElements();//相当于Iterator的next()方法
例:  

Vector v=new Vector();

for(Enumeration e=v.elements();e.hasMoreElements();)

{

System.out.println(e.nextElements());

}

五、LinkedList
        LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢。
特有方法:
1、增
        addFirst();
        addLast();
2、获取
        //获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
        getFirst();
        getLast();
3、删
        //获取元素,并删除元素。如果集合中没有元素,会出现NoSuchElementException
        removeFirst();
        removeLast();
在JDK1.6以后,出现了替代方法。
1、增
        offFirst();
        offLast();
2、获取
        //获取元素,但是不删除。如果集合中没有元素,会返回null。
        peekFirst();
        peekLast();
3、删
        //获取元素,并删除元素。如果集合中没有元素,会返回null。
        pollFirst();
        pollLast();
示例:

/*

使用LinkedList模拟一个堆栈或者队列数据结构。
堆栈:先进后出 如同一个杯子。

队列:先进先出 First in First out FIFO 如同一个水管。

*/

import java.util.*;

class LinkedListTest

{

public static void main(String[] args)

{

LinkedList l=new LinkedList();

l.addFirst("java01");

l.addFirst("java02");

l.addFirst("java03");

l.addFirst("java04");

l.addFirst("java05");

//堆栈输出
// stack(l);

//队列输出
queue(l);

}
//堆栈

public static void stack(LinkedList l)
{
     while (!l.isEmpty())
{

sop(l.removeFirst());
}

}

//队列

public static void queue(LinkedList l)

{
while(!l.isEmpty())
{

sop(l.removeLast());
}
}

//输出

public static void sop(Object obj)

{
System.out.println(obj);
}
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马