第7章-第3节-Java中的List集合

发布时间:2024年01月07日

1、List集合:

1)、概念

有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素

2)、特点

1>、有索引,索引从0开始

2>、可以存储重复元素

3>、元素存取有序(有序指的是存入的顺序与输出的顺序一致,此处的有序不是指从小到大的排序)

3)、 List集合特有的方法

方法名描述
void add(int index,E element)在此集合中的指定位置插入指定的元素
E remove(int index)删除指定索引处的元素,返回被删除的元素
E set(int index,E element)修改指定索引处的元素,返回被修改的元素
E get(int index)返回指定索引处的元

2、ArrayList:

1)、概念

ArrayList是List的实现类,底层使用的是数组结构来存储数据,所以,又称ArrayList为动态数组。

2)、 常用方法介绍

常用方法我们从四个方面一次介绍:增删改查

1>、增加:

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

/**
 * 该类用于演示ArrayList的常用方法
 */
public class AddDemo {
    public static void main(String[] args) {
        // 增加
        List list = new ArrayList();
        list.add(1);
        list.add(3);
        list.add(2);// 自动装箱
        System.out.println(list);
        // 插入数据
        list.add(1, 0);// 向指定位置插入一个数据,该位置的元素及后面的元素都要往后挪一个位置
        System.out.println(list);

        List list1 = new ArrayList();
        list1.add("zhangsan");
        list1.add("lisi");
        list1.add("wangwu");
        System.out.println(list1);

        List list2 = new ArrayList();
        list2.add(new Student("aa", 21));
        list2.add(new Student("bb", 22));
        list2.add(new Student("cc", 23));
        System.out.println(list2);

    }
}

注意:在使用插入数据方法的时候,插入数据的位置的值不能大于集合的长度,否则会出现下标越界异常

2>、删除:

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

public class RemoveDemo {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        System.out.println(list);

        // 根据元素的内容进行删除,返回值为Boolean类型(不推荐使用)
        boolean result = list.remove("zhangsan");
        System.out.println(result);
        System.out.println(list);

        // 根据元素的索引进行删除,返回值被删除的位置的元素,推荐使用
        Object object = list.remove(1);
        System.out.println(object);
        System.out.println(list);

        // 删除所有数据
        list.add("aaaa");
        list.add("bbbb");
        System.out.println(list);
        /*// 删除所有
        list.removeAll(list);
        System.out.println(list);*/

        // 清空集合
        list.clear();
        System.out.println(list);

    }
}

3>、修改:

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

public class UpdateDemo {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        System.out.println(list);

        // 修改指定索引位置的值,将原来的值返回,修改的索引的位置不能大于等于集合的长度
        Object object = list.set(3, "woniu");
        System.out.println(object);
        System.out.println(list);
    }
}

4>、查询:

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

public class SelectDemo {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        System.out.println(list);

        // 根据索引查询元素,索引的值不能大于集合的长度
        Object obejct = list.get(1);
        System.out.println(obejct);

        // 根据元素内容获取在集合中的索引,如果返回值为-1,则表示元素不在集合中
        int index = list.indexOf("lisi1");
        System.out.println(index);

        // 获取集合的长度
        int size = list.size();
        System.out.println(size);

        // 判断集合是否为空
        System.out.println(list.isEmpty());

        // 判断集合是否包含指定的元素
        boolean result = list.contains("wangwu");
        System.out.println(result);
    }
}

3)、四种遍历方式:

1>、普通for循环:

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

public class PuTongFor {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        System.out.println(list);

        for(int i = 0; i < list.size(); i++){
            System.out.println(list.get(i));
            list.set(i, "aaa");
        }
        System.out.println(list);
    }
}

2>、增强for循环:

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

public class ZengQiangFor {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        System.out.println(list);

        for(Object str : list){
            System.out.println(str);
            str = "aaa";
        }
        System.out.println(list);
    }
}

3>、迭代器:

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

public class DieDaiFor {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        System.out.println(list);

        // 1. 获取迭代器对象
        Iterator iterator = list.iterator();
        while(iterator.hasNext()){
            Object obj = iterator.next();
            System.out.println(obj);
            if(obj.equals("wangwu")){
                list.add("java");
            }
        }

        System.out.println(list);
    }
}

4)、列表迭代器:

ListIterator介绍

  • 通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器

  • 用于允许程序员沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置

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

public class LieBiaoFor {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        System.out.println(list);

        ListIterator listIterator = list.listIterator();
        while(listIterator.hasNext()){
            Object object = listIterator.next();
            System.out.println(object);
            if(object.equals("zhangsan")){
                // 需要使用迭代器对象进行保存操作
                listIterator.add("java");
            }
        }

        System.out.println(list);
    }
}

3、LinkedList:

1)、 概述

LinkedList是采用链表结构的方式来实现List接口的。

2)、 常用方法

使用与ArrayList一致,这里不在一一进行演示了

除了与Collection与List的方法之外,LinkedList还有一些自己特有的方法

方法名说明
public void addFirst(E e)在该列表开头插入指定的元素
public void addLast(E e)将指定的元素追加到此列表的末尾
public E getFirst()返回此列表中的第一个元素
public E getLast()返回此列表中的最后一个元素
public E removeFirst()从此列表中删除并返回第一个元素
public E removeLast()从此列表中删除并返回最后一个元素
import java.util.LinkedList;
import java.util.List;

public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        // 增加
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        System.out.println(list);
        // 插入数据
        list.add(1, "woniu");
        System.out.println(list);
        // 插入数据到开头
        list.addFirst("go");
        System.out.println(list);

        // 删除
        Object object = list.remove(0);
        System.out.println(object);
        System.out.println(list);
    }
}

?4、ArrayList 与 LinekedList比较:

相同点

都是List接口的实现类,都可以用于保存引用数据,都是非线程安全的

不同点

数据结构不同,ArrayList底层采用的数组结构,LinkedList采用的是双向链表结构

执行效率:

查询,修改:ArrayList要优于LinkedList

增加,删除:ArrayLis与LinkedList 有一个数据迁移的时间 VS 数据查询的时间

5、vector:?

1)、 概述

Vector:向量 !也是一个集合,而且是非常古老的集合!

API同样跟ArrayList一样的!

连同底层原理都是一样的!区别在于:线程安全

2)、 使用

使用与ArrayList一样,唯一的不同是ArrayList非线程安全,vector线程安全

public synchronized boolean add(E e) {
    modCount++;
    ensureCapacityHelper(elementCount + 1);
    elementData[elementCount++] = e;
    return true;
}

本电子书目录:《Java基础的重点知识点全集》

文章来源:https://blog.csdn.net/jnbbwyth/article/details/135443054
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。