8.List集合

目录

8.List集合

8.1.List集合有哪些特点

8.2.List接口中常用方法有哪些

8.2.1.List接口有对父接口Collection进行功能(方法)上的扩充

8.2.2.List接口中特有的方法(带索引)

8.3.List集合三种遍历方式

8.4.List集合实现类_ArrayList

8.4.1.ArrayList数据存储结构是什么

8.4.2.ArrayList特点

8.4.3.ArrayList为什么增删比较慢

8.4.4.ArrayList常用方法(ArrayList与父接口List中的方法基本一致,并没有进行功能上的扩充)

8.5.List集合实现类_LinkedList

8.5.1.LinkedList数据存储结构是什么

8.5.2.LinkedList特点

8.5.3.LinkedList特有的方法_进行首尾操作(LinkedList对父接口List进行功能上扩充)

8.6.Vector集合

 


8.List集合


8.1.List集合有哪些特点

1.在掌握Collection接口使用后,再来看看Collection接口中子类,下面将学习Collection中的常用两个子类(java.util.List集合、java.util.Set集合)。
2.List特点
     1.有序的集合,存储元素和取出元素的顺序是一致的
     2.索引,包含了一些带索引的方法
     3.允许存储重复的元素
3.之前已经学习过List接口的子类java.util.ArrayList类,该类中的方法都是来自List中定义的。

8.2.List接口中常用方法有哪些

8.2.1.List接口有对父接口Collection进行功能(方法)上的扩充

8.2.2.List接口中特有的方法(带索引)

1.List接口中特有的方法(带索引)
 *    -public void add(int index,E element):将指定的元素,添加到该集合指定位置
 *    -public E  get(int index):返回该集合中指定位置的元素
 *    -public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素
 *    -public E set(int index,E element):用指定元素替换集合中元素,并返回更新前元素

8.3.List集合三种遍历方式

list集合有序

1.for循环

2.迭代器

3.增强for

        /**
         * list集合遍历有三种
         */

        //1.使用普通for循环
        for (int i=0;i<list.size();i++){
            String s = list.get(i);
            System.out.println(s);
        }
        //2.使用迭代器
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
        //3.增强for循环
        for (String s : list) {
            System.out.println(s);
        }

8.4.List集合实现类_ArrayList

8.4.1.ArrayList数据存储结构是什么

8.4.2.ArrayList特点

8.4.3.ArrayList为什么增删比较慢

8.4.4.ArrayList常用方法(ArrayList与父接口List中的方法基本一致,并没有进行功能上的扩充)

1.java.utill.ArrayList集合数据存储的结构是数组结构
2.ArrayList特点:因为底层是数组,所以特点和数组一样:查询快,增删慢。
3.由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList集合是最常用集合。但许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。若需求是查询比较多,可以用ArrayList集合,如果增删操作比较多,效率就比较低
4.ArrayList集合底层就是一个数组底层源码是数组的复制,每增加一次前都会创建一个新数组,长度为原数组长度+1,把原数组复制过来。因此ArrayList集合查询快因为地址是连续的增删慢因为每添加一个元素,底层都要调用一个数组复制的方法,效率比较低。
5.ArrayList中的方法与List接口中的方法基本一致,并没有进行功能上的扩充

6.ArrayList常用方法: 

      1.public boolean add(E e):向集合中添加元素,参数的类型和泛型一致,返回布尔类型。
      2.public E get(int index):从集合中获取元素,参数是索引编号,返回值就是对应位置元素。
      3.public E remove(int index):从集合中删除元素,参数是索引编号,返回值是被删除的元素。
      4.public int size():获取集合的尺寸长度,返回值是集合中元素个数。
      2.备注:对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可以不写,但是对于其它集合来说,add添加动作不一定成功

public class ArrayList3 {
    public static void main(String[] args) {
        ArrayList<String>list=new ArrayList<>();
        //1.向集合中添加数据:add
        //备注:只有ArrayList集合的add方法可以不用返回值,其它集合要。
        boolean bol=list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        list.add("maliu");
        System.out.println(list);
        System.out.println("添加的动作是否成功:"+bol);

        //2.从集合中获取元素:get,索引从0开始
        String name=list.get(0);
        System.out.println("list集合中0号索引位置是"+name);

        //3.从集合中删除元素:remove,索引从0开始
        String whoRemoved=list.remove(0);
        System.out.println("被删除的人是:"+whoRemoved);
        System.out.println(list);

        //4.获取集合的长度,即元素的个数
        int size=list.size();
        System.out.println("集合的长度是:"+size);
    }
}

 

8.5.List集合实现类_LinkedList

8.5.1.LinkedList数据存储结构是什么

8.5.2.LinkedList特点

8.5.3.LinkedList特有的方法_进行首尾操作(LinkedList对父接口List进行功能上扩充)

1.java.util.LinkedList集合的数据存储结构链表方便元素的添加、删除的集合
2.LinkedList是一个双向链表
3.实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供大量首尾操作的方法
4.LinkedList集合特点
     1.底层是一个链表结构:查询慢,增删块
     2.里面包含大量操作首尾元素的方法
   注意:使用LinkedList集合特有的方法(即非List接口中定义的方法),不能使用多态(创建集合对象)因为多态的弊端是看不到子类特有的方法。
5.LinkedList集合特点与ArrayList集合相反,前者增删快,查询慢;后者增删慢,查询快
6.LinkedList集合特有的方法:

      --插入首尾--
 *    public void addFirst(E e):将指定元素插入此列表开头.等价于push方法
 *    public void addLast(E e):将指定元素插入此列表结尾. 等价于add方法
 *    public void push(E e):将元素推入此列表所表示的堆栈(压栈)。
 *

     --获取首尾--
 *    public E getFirst():返回此列表的第一个元素
 *    public E getLast():返回此列表的最后一个元素
 *

      --移除首尾--
 *    public E removeFirst():移除并返回此列表第一个元素。等效于pop()方法
 *    public E removeLast():移除并返回此列表的最后一个元素
 *    public E pop():从此列表所表示的堆栈处弹出一个元素(弹栈)
 *

      --判空--
 *    public boolean isEmpty():若列表不含元素则返回true

public class Demo3_LinkedList {
       public static void main(String[] args) {
           show01();
           show02();
       }
        /**
         *public void addFirst(E e):将指定元素插入此列表开头.等价于push方法
         *public void addLast(E e):将指定元素插入此列表结尾. 等价于add方法
         *public void push(E e):将元素推入此列表所表示的堆栈。。
         */
        private static void show01(){
            //创建LinkedList集合对象
            LinkedList<String> linked = new LinkedList<>();
            //使用add方法往集合中添加元素
            linked.add("a");
            linked.add("b");
            linked.add("c");
            System.out.println(linked);//[a,b,c]

            //public void addFirst(E e):将指定元素插入此列表开头,等价于push()
            linked.addFirst("A");
            linked.push("B");
            System.out.println(linked);//[B, A, a, b, c]
            //public void addLast(E e):将指定元素插入此列表结尾. 等价于add方法
            linked.addLast("d");
            System.out.println(linked);//
        }

    /**
     * public E getFirst():返回此列表的第一个元素
     * public E getLast():返回此列表的最后一个元素
     */
    private static void show02(){
        //创建LinkedList集合对象,不能使用多态
        LinkedList<String > linked = new LinkedList<>();
        //使用add方法往集合中添加元素
        linked.add("1");
        linked.add("2");
        linked.add("3");
        System.out.println(linked);
        if (!linked.isEmpty()){
            //为避免集合为空的异常NoSuchElementException,要先判空
            String first = linked.getFirst();
            System.out.println("linked集合第一个元素为:"+first);//1
            String last = linked.getLast();
            System.out.println("linked集合最后一个元素为:"+last);//3
        }
    }

    /**
     * public E removeFirst():移除并返回此列表第一个元素。等效于pop()方法
     * public E removeLast():移除并返回此列表的最后一个元素
     * public E pop():从此列表所表示的堆栈处弹出一个元素
     */
    private static void show03(){
        //创建LinkedList集合对象
        LinkedList<String> linked = new LinkedList<>();
        //使用add方法向集合添加元素
        linked.add("i");
        linked.add("ii");
        linked.add("iii");
        System.out.println(linked);
        String pop = linked.pop();
        System.out.println("移除第一个元素:"+pop);
        String last = linked.removeLast();
        System.out.println("移除最后一个元素:"+last);
    }
}

8.6.Vector集合

1.Vector集合是所有单列集合的祖先。
2.Vector类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是Vector的大小可以根据需要增大减小,以适应创建 Vector后进行添加或移除项的操作。  
3.Vector和ArrayList异同之处
     1.Vector和ArrayList集合底层数据结构都是数组。
     2.Vector与Collection实现不同,Vector是同步的,即是单线程,所以速度慢,所以从java2平台 v1.2版本开始被ArrayList集合取代。v1.2版本后Vector也实现类List接口。现在都v1.9版本了。

  • 都实现List接口,ArrayList怎么存怎么取数据,Vector也是。都是通过size获取有效长度。
  • 底层都是数组结构。
  • Arraylist内部原理是默认情况下创建一个长度10的数组,Vector也是,但ArrayList每次扩容1.5倍,Vector可指定扩容长度。
  • Vector与Collection实现不同,Vector是同步的,即是单线程,所以速度慢
  • vector扩容算法和arraylist基本一样,只是在计算新长度时做了判断,若增量<0,则新长度为两倍旧长度,若增量>0则新长度为(旧长度+增量)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值