Java学习笔记30(集合框架四:List接口)

2018-01-13 11:42:40来源:cnblogs.com作者:一清人点击

分享

List接口继承自Collection接口

具有重要的三大特点:

1.有序集合:存入和取出的顺序一致

2.此接口的用户可以对列表中每个元素插入位置精确的控制:可以通过索引操作

3.可以存储重复元素


List接口的特有方法(与索引有关):

package demo;import java.util.List;import java.util.ArrayList;//List接口继承Collection接口,下有很多实现类//例如ArrayListpublic class ListDemo {    public static void main(String[] args) {        function1();//添加        function2();//删除        function3();//修改    }    public static List<String> function(){        //创建集合        List<String> list = new ArrayList<>();        list.add("abc1");        list.add("abc2");        list.add("abc3");        list.add("abc4");        return list;    }    public static void function1(){        List<String> list = function();        System.out.println(list);        //[abc1, abc2, abc3, abc4]        list.add(1, "abc");//在1索引上添加        System.out.println(list);        //[abc1, abc, abc2, abc3, abc4]    }    public static void function2(){        List<String> list = function();        System.out.println(list);        //[abc1, abc2, abc3, abc4]        String s = list.remove(1);        System.out.println(s);//输出:abc2        System.out.println(list);        //[abc1, abc3, abc4]    }    public static void function3(){        List<String> list = function();        System.out.println(list);        //[abc1, abc2, abc3, abc4]        String s = list.set(2, "abc");        System.out.println(s);//输出:abc3        System.out.println(list);        //[abc1, abc2, abc, abc4]    }}

 List集合遍历方式有三种:迭代器遍历,普通for循环遍历,增强for循环遍历

List接口的数据存储结构:

List的众多子类存储元素所采用的结构方式是不同的,因此导致了众多集合有了各自的特点:

数据存储的常用结构有:堆栈,队列,数组,链表,这里简单介绍下:

堆栈存储结构通俗解释:子弹压进弹夹,先压进去的在下面,后压进去的在上面,开枪的时候,上边的子弹先弹出来,下边的后出来(先进后出)

队列存储结构通俗解释:坐火车排队安检,每个人依次检查,只有前面的人查完,才能轮到后边的人(先进先出)

数组结构:已经接触过很多次,通过索引查找块,不过由于定长,所以增删慢

链表结构:每一个元素分为两部分,一部分记录上一个元素地址,另一部分存储当前元素的信息,使得每一次个元素像自行车链一样连接

     查找时候由于需要通过连接的节点,速度慢,不过增删的时候,原理是直接操作地址,不改变本身的结构,所以速度很快

ArrayList集合采用了数组结构存储方式,所以查询快,增删慢,由于线程不安全,运行速度很快,

空参创建初始容量10,可变数组,原理是System的复制数组方法,以及一些其他的操作后进行扩容

LinkedList集合则采用了单向链表的数据结构,所以增删快,查询慢,同样线程不同步,运行速度快

LinkedList提供了大量的首尾操作

示例:

package demo;import java.util.LinkedList;public class LinkedListDemo {    public static void main(String[] args) {        function1();// 添加        function2();// 获取头尾        function3();// 移除并返回开头    }    public static void function1() {        LinkedList<String> link = new LinkedList<String>();        link.addLast("a");        link.addLast("b");        link.addLast("c");        link.addLast("d");        link.addFirst("1");        link.addFirst("2");        link.addFirst("3");        System.out.println(link);        // [3, 2, 1, a, b, c, d]    }    public static void function2() {        LinkedList<String> link = new LinkedList<String>();        link.add("1");        link.add("2");        link.add("3");        link.add("4");        if (!link.isEmpty()) {            String first = link.getFirst();            String last = link.getLast();            System.out.println(first);// 1            System.out.println(last);// 4        }    }    public static void function3() {        LinkedList<String> link = new LinkedList<String>();        link.add("1");        link.add("2");        link.add("3");        link.add("4");        String first = link.removeFirst();        String last = link.removeLast();        System.out.println(first);// 1        System.out.println(last);// 4        System.out.println(link);// [2, 3]    }}

还有一个Vector集合,数组结构,是JDK最早的集合,方法和ArrayList基本相同,运行速度慢,所以后来被ArrayList代替,这里不介绍了

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台