【JAVA语言-第15话】集合框架(二)——List、ArrayList、LinkedList、Vector集合

这篇具有很好参考价值的文章主要介绍了【JAVA语言-第15话】集合框架(二)——List、ArrayList、LinkedList、Vector集合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

List集合

1.1 概述

1.2 特点

1.3 常用方法

1.4 ArrayList集合

1.4.1 概述 

1.4.2 练习

1.5 LinkedList集合 

1.5.1 概述

1.5.2 特点

1.5.3 常用方法

1.5.4 练习

1.6 Vector类

1.6.1 概述

1.6.2 练习

1.7 List实现类的异同点


List集合

1.1 概述

        java.util.List:List是一个接口,它继承自Collection接口。常用的实现类有ArrayList和LinkedList。使用List接口的好处是可以将代码与具体的实现类解耦,从而提高代码的灵活性和可维护性。

1.2 特点

  1. 有序的集合,存储元素和取出元素的顺序是一致的(存储123,取出123)。
  2. 有索引,包含了一些带索引的方法 。
  3. 允许存储重复的元素 。

1.3 常用方法

        List接口继承Collection接口,因而Collection中常用的方法List也可使用。这里主要列举一些List个性化的方法(带索引方法的使用)。List接口不能直接创建对象,需要采用多态形式创建 其 实现类对象,才能使用。

方法:

  • void add(int index,E element):将E,添加到该集合中的index处。
  • E get(int index):返回集合中index的E。
  • E remove(int index):移除列表中index的E,返回的是被移除的E。
  • E set(int index,E element):用E替换集合中index的E,返回值是更新前的E。
  • int indexOf(E element):返回集合中E的index,没有找到返回-1。

        

说明:

        E:集合元素,集合中具体的值。

        index:指定位置,集合的索引值。

        

注意事项:操作索引的时候,一定要防止索引越界异常:

  • IndexOutOfBoundsException:索引越界异常,集合会报。
  • ArrayIndexOutOfBoundsException:数组索引越界异常。
  • StringIndexOutOfBoundsException:字符串索引越界异常。

1.4 ArrayList集合

1.4.1 概述 

        java.util.ArrayList:ArrayList是一种动态数组,它实现了List接口。ArrayList可以根据需要自动调整大小,可以存储任意类型的对象。ArrayList提供了一系列的方法,可以方便地对其中的元素进行添加、删除、查找和遍历操作。与普通的数组相比,ArrayList的大小是可变的,并且可以自动处理底层数组的扩容和缩容。使用ArrayList能够方便地操作和管理一系列对象的集合。

【JAVA语言-第15话】集合框架(二)——List、ArrayList、LinkedList、Vector集合,JAVA语言,windows

1.4.2 练习

源代码: 

package com.zhy.coll;

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

public class TestArrayList {
    public static void main(String[] args) {
        //创建一个集合<泛型为String类型>,多态写法,接口引用 指向 实现类对象
        List<String> list = new ArrayList<String>();

        //往集合中添加元素
        list.add("elememt1");
        list.add("elememt2");
        list.add("elememt3");

        //打印集合
        System.out.println("初始化集合:" + list);

        //1.将指定元素,添加到该集合的指定位置上
        list.add(1,"elementNew");
        System.out.println("在索引1插入元素:" + list);

        //2.返回集合中指定位置的元素
        String nameE = list.get(0);
        System.out.println("返回索引0的元素:" + nameE);

        //3.移除集合中指定位置的元素,返回的是被移除的元素
        String removeE = list.remove(2);
        System.out.println("移除索引2的元素,返回的是被移除的元素:" + removeE);

        //4.用指定元素替换集合中指定位置的元素,返回的是更新前的元素
        String beforeE = list.set(0,"elementUpdate");
        System.out.println("用新元素替换掉索引0的元素,返回的是更新前索引0的元素:" + beforeE);

        //5.返回集合中指定元素的索引,找不到返回-1
        int indexE = list.indexOf("elementOld");
        System.out.println("返回(elementOld)的索引:" + indexE);

        //使用迭代器遍历List集合
        System.out.print("使用迭代器遍历List集合:");
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            String tempE = iterator.next();
            System.out.print(tempE + " ");
        }
    }
}

输出结果:

【JAVA语言-第15话】集合框架(二)——List、ArrayList、LinkedList、Vector集合,JAVA语言,windows

1.5 LinkedList集合 

1.5.1 概述

        java.util.LinkedList:LinkedList实现了Java的List接口,因而可以像其他List实现类一样使用。它也实现了Deque接口,因而可以作为双端队列使用。另外,LinkedList还实现了Queue接口,因而可以作为队列使用。

1.5.2 特点

  • LinkedList是Java中的一种数据结构,它是一个双向链表,每个节点包含了数据本身以及指向前一个节点和后一个节点的引用
  • LinkedList不需要预先指定容量,可以根据需要动态地增加或减少元素。
  • LinkedList允许快速插入和删除元素,因为只需要调整节点的引用,而不需要像数组那样移动元素。
  • 访问和搜索元素的性能较差,因为需要从头或尾开始遍历链表。

1.5.3 常用方法

        使用LinkedList集合特有的方法,不能使用多态。

  • void addFirst(E e):将指定元素插入此列表的开头。
  • void addLast(E e):将指定元素添加到此列表的结尾。
  • void push(E e):将元素推入此列表所表示的堆栈。
  • E getFirst():返回此列表的第一个元素。
  • E getLast():返回此列表的最后一个元素。
  • E removeFirst():移除并返回此列表的第一个元素。
  • E removeLast():移除并返回此列表的最后一个元素。
  • E pop():从此列表所表示的堆栈出弹出一个元素。

1.5.4 练习

源代码:

package com.zhy.coll;

import java.util.LinkedList;

public class TestLinkedList {
    public static void main(String[] args) {
        //创建LinkedList对象
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("Annie");
        linkedList.add("Bob");
        linkedList.add("Tom");
        System.out.println("初始化LinkedList集合:" + linkedList);

        //返回此列表的第一个元素
        String fistE = linkedList.getFirst();
        System.out.println("列表的第一个元素为:" + fistE);

        //返回此列表的最后一个元素
        String lastE = linkedList.getLast();
        System.out.println("列表的最后一个元素为:" + lastE);

        //将指定元素插入此列表的开头
        linkedList.addFirst("Lisa");
        System.out.println("在列表开头插入元素:" + linkedList);

        //将指定元素添加到此列表的结尾
        linkedList.addLast("Carl");
        System.out.println("在列表末尾插入元素:" + linkedList);

        //移除并返回此列表的第一个元素
        linkedList.removeFirst();
        System.out.println("移除第一个元素:" + linkedList);

        //移除并返回此列表的最后一个元素
        linkedList.removeLast();
        System.out.println("移除最后一个元素:" + linkedList);

        //将元素推入此列表所表示的堆栈
        linkedList.push("Dick");
        System.out.println("在栈首添加元素:" + linkedList);

        //从列表所表示的堆栈出弹出一个元素
        linkedList.pop();
        System.out.println("将栈首的元素弹出:" + linkedList);

        //使用增强for遍历列表
        System.out.print("使用增强for遍历列表:");
        for(String e : linkedList){
            System.out.print(e + " ");
        }
    }
}

输出结果:

【JAVA语言-第15话】集合框架(二)——List、ArrayList、LinkedList、Vector集合,JAVA语言,windows

1.6 Vector类

1.6.1 概述

        Vector类是Java中提供的一种动态数组实现。它是使用数组来存储元素的,并且可以根据需要自动调整数组的大小。Vector类提供了一系列方法来操作数组,例如添加元素、获取元素、删除元素等。Vector类还具有线程安全的特性,可以在多个线程同时访问和修改数组,以确保数据的一致性和安全性。因此,Vector类常用于需要在多线程环境下操作数组的场景中

1.6.2 练习

源代码:

package com.zhy.coll;

import java.util.Iterator;
import java.util.Vector;

public class TestVector {
    public static void main(String[] args) {
        Vector<String> vector = new Vector<>();
        vector.add("element1");
        vector.add("element2");
        vector.add("element3");
        System.out.println("初始化集合:" + vector);

        vector.remove(0);
        System.out.println("移除第0个元素:" + vector);

        vector.set(0,"elementNew");
        System.out.println("修改第0个元素的值:" + vector);

        System.out.print("使用增强for遍历集合:");
        for (String name : vector){
            System.out.print(name + " ");
        }

        System.out.print("\n使用迭代器遍历集合:");
        Iterator<String> iterator = vector.iterator();
        while(iterator.hasNext()){
            String ele = iterator.next();
            System.out.print(ele + " ");
        }
    }
}

输出结果: 

【JAVA语言-第15话】集合框架(二)——List、ArrayList、LinkedList、Vector集合,JAVA语言,windows

1.7 List实现类的异同点

        ArrayList,LinkedList和Vector都是Java集合框架中的实现类,它们用于存储和操作集合数据。三者的异同如下:

相同点:

  • 都实现了List接口,都支持索引访问元素。
  • 都可以存储任意类型的对象。
  • 都具有动态扩容的能力。

不同点: 

  • ArrayList底层使用数组实现;LinkedList底层使用双向链表实现;Vector底层也使用数组实现。
  • ArrayList是非线程安全的;LinkedList和Vector是线程安全的。
  • ArrayList和LinkedList适用于随机访问和遍历;而Vector适用于需要线程安全性的场景。
  • ArrayList和LinkedList的插入和删除操作的性能取决于位置;ArrayList在尾部插入和删除元素效率高,而LinkedList在中间插入和删除元素效率高。
  • Vector相比ArrayList和LinkedList,性能较低,因为它需要进行同步(线程安全)操作。

        因此,选择ArrayList还是LinkedList或Vector取决于具体的需求。如果需要随机访问和遍历,且不需要线程安全,则选择ArrayList;如果需要频繁插入和删除元素,或需要线程安全,则选择LinkedList;如果需要线程安全且不考虑性能,则选择Vector文章来源地址https://www.toymoban.com/news/detail-823899.html

到了这里,关于【JAVA语言-第15话】集合框架(二)——List、ArrayList、LinkedList、Vector集合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java:ArrayList集合、LinkedList(链表)集合的底层原理及应用场景

    入队 出队 压栈(push),addFirst可以替换成push,官方专门为压栈写了push的API 出栈(pop),removeFirst可以替换成pop,官方专门为出栈写了pop的API

    2024年02月12日
    浏览(28)
  • Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)

    要了解List接口,就不得不说起Java的集合框架。 (该图来自菜鸟教程) Java 集合框架主要包括两种类型的容器,集合Collection和图Map。 Collection接口代表了 单列集合 ,它包含了一组Object元素,每个元素都有一个值。 (这里有个“泛型擦除”的概念,在此不提及有兴趣可自行了

    2024年01月19日
    浏览(37)
  • Java中List接口两个实现,ArrayList类和LinkedList类的常用方法(一)

    要了解List接口,就不得不说起Java的集合框架。 (该图来自菜鸟教程) Java 集合框架主要包括两种类型的容器,集合Collection和图Map。 Collection接口代表了 单列集合 ,它包含了一组Object元素,每个元素都有一个值。 (这里有个“泛型擦除”的概念,在此不提及有兴趣可自行了

    2024年01月19日
    浏览(31)
  • ArrayList和Vector及LinkedList的区别

    1.ArrayList和Vector的区别 第一句话:ArrayList和Vector底层都是数组实现的,初始容量都为10;在ArrayList的底层,是通过定义一个DEFAULT_CAPACITY的常量来指定的,而Vector的底层,是直接在空参构造中,通过写死了一个this(10)来指定的; 第二句话:Vector大部分方法的底层实现,都加了 s

    2024年02月11日
    浏览(29)
  • java基础 -02java集合之 List,AbstractList,ArrayList介绍

    在正式List之前,我们先了解我们补充上篇Collection接口的拓展实现,也就是说当我我们需要实现一个不可修改的Collection的时候,我们只需要拓展某个类,也就是AbstractCollection这个类,他是Collection接口的骨干实现,并以最大限度的实现了减少此接口所需要的工作; 如上两图进行

    2024年01月20日
    浏览(30)
  • Javat集合之Lis---(ArrayList和LinkedList)

    提示:以下是本篇文章正文内容,下面案例可供参考 List是一种常用的集合类型,它可以存储任意类型的对象,也可以结合泛型来存储具体的类型对象, 本质上就是一个容器。 ArrayList和LinkedList通用方法: 以上方法通用且常用的方法其他方法可参考相关的文档进行查询即可,

    2024年01月24日
    浏览(32)
  • 探索Java集合框架—数据结构、ArrayList集合

    Java集合的使用相信大家都已经非常得心应手,但是我们怎么做到知其然,更知其所以然这种出神入化的境界呢?我们揭开集合框架底层神秘面纱来一探究竟 目录 一、背景介绍 二、思路方案 数据结构是什么? 数据结构可以分为线性和非线性两种数据结构 线性数据结构: 非

    2024年02月10日
    浏览(31)
  • java集合框架(二)LinkedList常见方法的使用

    @[toc] ## 一、什么是LinkedList LinkedList是Java中的一个双向链表。 它实现了List和Deque接口,在使用时可以像List一样使用元素索引,也可以像Deque一样使用队列操作。 LinkedList每个节点都包含了前一个和后一个节点的引用,因此可以很方便地在其中进行节点的插入、删除和移动。 相

    2024年02月05日
    浏览(32)
  • Java集合框架之ArrayList源码分析

    ArrayList是Java提供的线性集合,本篇笔记将从源码(java SE 17)的角度学习ArrayList: 什么是ArrayList? ArrayList底层数据结构是怎么实现的? 作为一个容器,分析增删改查的过程 ArrayList的扩容机制 由ArrayList的定义可知,ArrayList继承了AbstractList抽象类,实现了List、RandomAccess、Cloneabl

    2024年02月07日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包