Java-集合框架-List

1. List集合共性方法

collection下面有:

  1. List:元素的有序的,元素可以重复,因为该集合体系有索引
  2. Set: 元素是无序,元素不可以重复

List特有方法:凡是可以操作角标的方法都是该体系特有的方法。

  1. add(index, element); addAll(index, Collection);
  2. remove(index);
  3. set(index, element);
  4. get(index); subList(from, to); listIterator();
package collectionDemo;

import java.util.ArrayList;
import java.util.Iterator;

public class ListDemo {
    public static void main(String[] args) {
        ArrayList al = new ArrayList();

        //1.添加元素
        al.add("java1");
        al.add("java2");
        al.add("java3");
        sop("初始化为:"+al);
        //在指定位置添加元素
        al.add(1,0);
        sop("在位置1处添加元素:"+al);


        //2. 删除指定位置的元素
        al.remove(0);
        sop("删除位置0处的元素:"+al);

        //3. 修改元素
        al.set(1,"shh");
        sop("修改位置1处的元素:"+al);

        //4. 通过角标获取元素
        sop("获得位置1处的元素:"+al.get(1));
        //获取所有元素
        sop("获取所有元素..................");
        for(int x=0; x<al.size(); x++){
            sop("al["+x+"]:"+al.get(x));
        }

        sop("通过迭代器获取所有元素..................");
        Iterator it = al.iterator();
        while (it.hasNext()){
            sop(it.next());
        }
    }
    public static void sop(Object obj){

        System.out.println(obj);
    }
}

结果;

初始化为:[java1, java2, java3]
在位置1处添加元素:[java1, 0, java2, java3]
删除位置0处的元素:[0, java2, java3]
修改位置1处的元素:[0, shh, java3]
获得位置1处的元素:shh
获取所有元素..................
al[0]:0
al[1]:shh
al[2]:java3
通过迭代器获取所有元素..................
0
shh
java3

2. ListIterator

ListIterator:在迭代过程中,对元素进行增删改查。

package collectionDemo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListDemo {
    public static void main(String[] args) {
        ArrayList al = new ArrayList();
        al.add("java0");
        al.add("java1");
        al.add("java2");
        al.add("java3");
        al.add("java4");

        //通过indexOf()获取对象的位置
        sop("index="+al.indexOf("java2"));

        //subList
        List sub = al.subList(1,3);
        sop("sub="+sub);

        //在迭代过程中,准备添加或者删除元素
        Iterator it = al.iterator();
        while (it.hasNext()){
            Object obj = it.next();
            if(obj.equals("java2")){
                //al.add("java008"); 会产生ConcurrentModificationException异常
                it.remove(); // 将java2的引用从集合中删除了,Iterator提供的方法太少
            }
        }
        sop(al);

    }
    public static void sop(Object obj){

        System.out.println(obj);
    }
}

在迭代过程中,想对元素进行操作:

  1. 在迭代器迭代的过程中,不能使用集合的方法,否则会产生ConcurrentModificationException异常
  2. 只能使用迭代器的方式
  3. 可以使用Iterator提供的方法,但是提供的方法太少,只有判断和删除的操作
  4. 列表迭代器ListIterator的方法相对就多一些,可以对元素进行删除,修改等。

List集合特有的迭代器:ListIterator,它是Iterator的子接口

package collectionDemo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class ListDemo {
    public static void main(String[] args) {
        ArrayList al = new ArrayList();
        al.add("java0");
        al.add("java1");
        al.add("java2");
        al.add("java3");
        al.add("java4");


        //在迭代过程中,准备添加或者删除元素
        ListIterator li = al.listIterator();
        while (li.hasNext()){
            Object obj = li.next();
            if(obj.equals("java2")){
                li.add("java009");
            }
        }
        sop(al);

        sop("hasNext:"+li.hasNext());
        sop("hasPrevious:"+li.hasPrevious());

        sop("..............................");

        while (li.hasPrevious()){
            sop("pre::"+li.previous());
        }

    }
    public static void sop(Object obj){

        System.out.println(obj);
    }
}

输出:

[java0, java1, java2, java009, java3, java4]
hasNext:false
hasPrevious:true
..............................
pre::java4
pre::java3
pre::java009
pre::java2
pre::java1
pre::java0

3. List集合具体对象的特点

collection下面有:

  1. List:元素的有序的,元素可以重复,因为该集合体系有索引
    ______ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增删速度慢
    ______LinkedList:底层的数据结构使用的是链表结构。特点:查询速度慢,但是增删速度快
    ______Vector:底层的数据结构使用的是数组结构,线程同步,被ArrayList替代了
  2. Set: 元素是无序,元素不可以重复

4. Vector中的枚举

枚举就是Vector特有的取出的方式。

  • 发现枚举和迭代器很像
  • 其实枚举和迭代器是一样的
  • 因为枚举的名称以及方法的名称都过长
  • 所以被迭代器取代了
  • 枚举郁郁而终了!!!!
package collectionDemo;

import java.util.Enumeration;
import java.util.Vector;

public class VectorDemo {
    public static void main(String[] args) {
        Vector v = new Vector();
        v.add("java1");
        v.add("java2");
        v.add("java3");
        v.add("java4");

        Enumeration en = v.elements();
        while (en.hasMoreElements()){
            sop(en.nextElement());
        }
    }
    public static void sop(Object obj){

        System.out.println(obj);
    }
}

5. LinkedList

LinkedList特有的方法:

  • addFirst();
  • addLast();
  • getFirst();:get获取元素,但是不删除元素
  • getLast();
  • removeFirst();:remove获取元素,但是删除元素。如果集合中没有元素,会出现NoSuchElementException异常
  • removeLast();

在JDK1.6之后,为了避免抛出异常,出现了代替get和remove的方法:

  • offerFirst();
  • offerLast();
  • peekFirst();
  • peekLast();
package collectionDemo;

import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList link = new LinkedList();
        link.addFirst("java1");
        link.addFirst("java2");
        link.addFirst("java3");
        link.addFirst("java4");
        sop(link);

        sop(".............get................");
        sop("getFirst:"+link.getFirst());
        sop("getLast:"+link.getLast());
        sop(link);

        sop("..............remove...............");
        sop("removeFirst:"+link.removeFirst());
        sop("removeLast:"+link.removeLast());
        sop(link);

        sop(".............取出列表所有元素................");
        while (!link.isEmpty()){
            sop(link.removeFirst());
        }

    }

    public static void sop(Object obj){

        System.out.println(obj);
    }
}

输出:

[java4, java3, java2, java1]
.............get................
getFirst:java4
getLast:java1
[java4, java3, java2, java1]
..............remove...............
removeFirst:java4
removeLast:java1
[java3, java2]
.............取出列表所有元素................
java3
java2
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值