集合(3)----List接口

一、接口List                                                                                                                           点击此处返回总目录

二、List接口的特有的方法

三、ArrayList

四、LinkedList

五、Vector

 

 

 

一、接口 List<E>

序列。(我理解的List就是线性表)。List的三个主要特性:

1. 是有序的集合(不是排序,而是存储的顺序和取出的顺序是一样的)。

2. 用户可以对列表中每个元素的插入位置进行精确地控制。

3. 可以存储重复的数据。

 

List接口继承自Collection接口。List接口的实现类有:ArrayList、LinkedList等。

List接口下有很多实现类,他们存储元素的存储方式不一样,这就导致这些集合各有各的特点,供我们在不同的环境下使用。

常用的数据存储方式有:堆栈、队列、数组、链表。

 

 

 

二、List接口的特有的方法

List接口的抽象方法,有一部分是跟他的父类Collection是一样的。这一部分就没必要看了,前面学过。

我们只需要关注List接口特有的方法即可。

1. void add(int index, E element)              //将元素插入到指定位置【例1】。要小心越界异常问题。

2. E get(int index)                                     //获取索引位置的元素。【例2】

3. E remove(int index)                             //删除指定位置的元素,并把该元素返回。【例3】

4. E set(int index, E element)                   //将指定位置的元素进行替换,返回的是替换之前的元素。【例4】

 

 

 

例1:

package cn.itcast.demo01;

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

public class Test {
    public static void main(String[] args) {
        List<String> l = new ArrayList<String>();
        l.add("aa");
        l.add("bb");
        l.add("cc");
        System.out.println(l);      //[aa, bb, cc]
        
        l.add(1, "dd");                 //在位置1上插入"dd"。注意不要越界,可以写0,1,2,3,但是不能写4.
        System.out.println(l);      //[aa, dd, bb, cc]
        
    }
}

例2:

package cn.itcast.demo01;

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

public class Test {
    public static void main(String[] args) {
        List<String> l = new ArrayList<String>();
        l.add("aa");
        l.add("bb");
        l.add("cc");
        System.out.println(l);             //[aa, bb, cc]
        
        System.out.println(l.get(2));  //cc
    }
}

例3:

package cn.itcast.demo02;

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

public class Test {
    public static void main(String[] args) {
        List<Double> list = new ArrayList<Double>();
        list.add(3.14);
        list.add(4.12);
        list.add(5.6);
        System.out.println(list);   //[3.14, 4.12, 5.6]
        
        Double d = list.remove(1);
        System.out.println(d);      //4.12
        System.out.println(list);   //[3.14, 5.6]
    }
}

例4:

package cn.itcast.demo02;

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

public class Test {
    public static void main(String[] args) {
        List<Double> list = new ArrayList<Double>();
        list.add(3.14);
        list.add(4.12);
        list.add(5.6);
        System.out.println(list);   //[3.14, 4.12, 5.6]
        
        Double d = list.set(0, 8.88);
        System.out.println(d);      //3.14
        System.out.println(list);   //[8.88, 4.12, 5.6]
    }
}

 

三、ArrayList

List接口的大小可变数组的实现。本质上就是一个数组。所以查询快,增删慢。ArrayList是线程不安全的。

查看源码可以看到,当调用add操作时,可能会扩容。扩容就是把数组拷贝到另一个数组中。数组的拷贝本质使用的是System.arraycopy()函数。

 

 

四、LinkedList

List接口的链表实现。是单向链表。查询速度比较慢,增删速度快。也是线程不同步的。

1. public void addFirst(E e)         //将元素插入到列表的开头。【例1】

2. public void addLast(E e)          //将元素插入到列表的最后。跟add()效果相同。【例1】

3. public E getFirst()                   //返回此列表的第一个元素。如果没有元素,会有异常。【例2】

4. public E getLast()                    //返回此列表的最后一个元素。如果没有元素,会有异常。【例2】

5. public E removeFirst()           //移除并返回此列表的第一个元素。【例3】

6. public E removeLast()            //移除并返回此列表的最后一个元素。【例3】

 

 

例1:

package cn.itcast.demo04;

import java.util.LinkedList;

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> link = new LinkedList<Integer>();
        link.add(11);
        link.add(12);
        link.add(13);
        System.out.println(link);   //[11, 12, 13]
        
        link.addFirst(0);
        System.out.println(link);   //[0, 11, 12, 13]
        
        link.addLast(22);
        System.out.println(link);   //[0, 11, 12, 13, 22]
    }
}

例2:

package cn.itcast.demo05;

import java.util.LinkedList;

public class Test {
    public static void main(String[] args) {
        LinkedList<String> link = new LinkedList<String>();
        link.add("aaa");
        link.add("bbb");
        link.add("ccc");
        
        String first = link.getFirst();
        String last = link.getLast();
        System.out.println(first);            //aaa
        System.out.println(last);            //ccc
        
    }
}

例3:

package cn.itcast.demo06;

import java.util.LinkedList;

public class Test {
    public static void main(String[] args) {
        LinkedList<String> link = new LinkedList<String>();
        link.add("aa");
        link.add("bb");
        link.add("cc");
        System.out.println(link);    //[aa, bb, cc]
        
        String first = link.removeFirst();
        String last = link.removeLast();
        
        System.out.println(first);   //aa
        System.out.println(last);    //cc
        System.out.println(link);    //[bb]
        
    }
}

 

五、Vector 

跟ArrayList一回事,也是一个可变的数组。版本比较早。与新的collection实现不同,是线程安全的,意味着速度慢。

已经被ArrayList集合取代了。郁郁而终了已经~~已经淡出历史舞台~~卸磨杀驴了已经~~

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值