Java中的List接口实现类解析

 更新时间:2022年02月15日 09:40:44   作者:gfjserhukher  
这篇文章主要介绍了Java中的List接口实现类解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Java的List接口实现类

实现类ArrayList

ArrayList类相当于一个容量可变的动态数组,当超过了他的大小时,类集自动增加,当对象被删除后,数组就可以缩小。

import java.util.*;
public class ListDemo {
    public static void main(String args[]){
        Collection c1 = new ArrayList();//实例化一个具体的子类对象
        for(int i=0;i<5;i++){
            c1.add(new Integer(i));
        }//循环添加5个整型类对象
        System.out.println("c1:"+c1);
        Collection c2 = new ArrayList();
        c2.addAll(c1);
        c2.remove(new Integer(3));
        c2.add("hehe");
        System.out.println("c2:"+c2);
        Iterator it = c2.iterator();
        while(it.hasNext()){
            Object obj = it.next();
            System.out.println("Iterator遍历c2  "+obj+"\t");
        }
    }
}

运行结果:

c1:[0, 1, 2, 3, 4]
c2:[0, 1, 2, 4, hehe]
Iterator遍历c2  0    
Iterator遍历c2  1    
Iterator遍历c2  2    
Iterator遍历c2  4    
Iterator遍历c2  hehe    

注:

Collection的打印结果以方括号括住,每个元素之间以逗号相隔。由ArrayList的结构特点可知,该类取出元素有较高的效率,但元素做删除或插入操作较慢。

实现类LinkedList

import java.util.LinkedList;
public class LinkedListDemo {
    public static void main(String args[]) {
        LinkedList linkedList = new LinkedList();
        linkedList.add("F");
        linkedList.add("B");
        linkedList.add("D");
        linkedList.add("E");
        linkedList.add("C");
        System.out.println("显示初始化后linklist的内容:" + linkedList);
        linkedList.addLast("Z");
        linkedList.addFirst("AO");
        linkedList.add(1, "AI");
        System.out.println("显示添加操作后linkedList内容:" + linkedList);
        linkedList.remove("F");
        linkedList.remove(2);
        System.out.println("显示删除操作后的linkedList内容:" + linkedList);
        linkedList.removeFirst();
        linkedList.removeLast();
        System.out.println("显示删除操作后linkList内容:" + linkedList);
        Object object = linkedList.get(2);
        //修改内容
        linkedList.set(2, (String) object + "Chaanged");
        System.out.println("现实操作后linklist内容:" + linkedList);
    }
}

运行结果:

显示初始化后linklist的内容:[F, B, D, E, C]
显示添加操作后linkedList内容:[AO, AI, F, B, D, E, C, Z]
显示删除操作后的linkedList内容:[AO, AI, D, E, C, Z]
显示删除操作后linkList内容:[AI, D, E, C]
现实操作后linklist内容:[AI, D, EChaanged, C]

Process finished with exit code 0

注:

LinkedList容器类提供了一个链接列表数据结构,通过连接指针来关联前后两个元素。因为LinkedList是使用双向链表实现的容器,所以针对频繁的插入或删除元素,它适合实现栈和队列。

实现类Vector

Vector类提供了实现了可增长数组的功能,随着更多元素加入其中,数组变得更大,在删除一些元素之后,数组变小。Vector类的大多数操作和ArrayList类相同,区别之处在于Vector类是线程同步的。

import java.util.Vector;
public class VectorDemo {
    public static void main(String args[]){
        Vector v = new Vector();
        v.add("one");
        v.add("two");
        v.add("three");
        System.out.println("显示向量初始值:"+v.toString());
        v.insertElementAt("zero",0);
        v.insertElementAt("oop",3);
        System.out.println("显示插入后向量值:"+v.toString());
        v.setElementAt("three",3);
        v.setElementAt("four",4);
        System.out.println("显示修改后元素向量值:"+v.toString());
        v.removeAllElements();
        System.out.println("显示全删除后向量值:"+v.toString());
    }
}

运行结果:

显示向量初始值:[one, two, three]
显示插入后向量值:[zero, one, two, oop, three]
显示修改后元素向量值:[zero, one, two, three, four]
显示全删除后向量值:[]

Process finished with exit code 0

注解:

Java的集合与数组的区别在于,在创建Java数组时,必须明确指定数组的长度,数组一旦创建,其长度就不能被改变。为了使程序能方便的存储,检索和操纵数目不固定的一组数组,JDK类库创建了Java集合,所有Java集合类都位于java.util包中。另外Java集合中不能存放基本类型数据,而只能存放对象的引用。

List三个实现类

List 是有序的 Collection。

List 一共三个实现类分别是 ArrayListVector LinkedList

  • ArryList底层通过数组实现,允许对元素进行快速随机访问,数组的缺点是元素之间不能有间隔。当数组大小不满足时,需要增加存储能力,即将已有数组的数据复制到新的存储空间。插入和删除的代价较高,适合于随机查找和遍历。线程是不安全的。排列有序,数据可重复
  • Vector 底层通过数组实现,支持线程的同步,即某一时刻只有一个线程能够写Vector,但实现同步的代价很高,访问速度比ArryList慢,线程安全但效率低。排列有序,数据可重复
  • LinkList 底层用链表实现适于数据的动态插入和删除,但随即访问和遍历的速度慢。排列有序,但数据不可重复。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 一个牛人给Java初学者的建议(必看篇)

    一个牛人给Java初学者的建议(必看篇)

    下面小编就为大家带来一篇一个牛人给Java初学者的建议(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 解决FileWriter 写入文本不换行的问题

    解决FileWriter 写入文本不换行的问题

    这篇文章主要介绍了解决FileWriter 写入文本不换行的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • java如何交换这两个变量的值方法介绍

    java如何交换这两个变量的值方法介绍

    在编程中可能会使用java来完成两个变量值的交换,本文将介绍如何解决此类问题,希望可以帮助您
    2012-11-11
  • Java中对象的比较操作实例分析

    Java中对象的比较操作实例分析

    这篇文章主要介绍了Java中对象的比较操作,结合实例形式分析了java对象比较操作实现方法与相关操作注意事项,需要的朋友可以参考下
    2019-08-08
  • SpringBoot pdf打印及预览(openhtmltopdf+freemarker)

    SpringBoot pdf打印及预览(openhtmltopdf+freemarker)

    这篇文章主要介绍了SpringBoot pdf打印及预览(openhtmltopdf+freemarker)
    2023-05-05
  • HotSpot的Java对象模型之Oop-Klass模型详解

    HotSpot的Java对象模型之Oop-Klass模型详解

    这篇文章主要介绍了HotSpot的Java对象模型之Oop-Klass模型详解,在JVM层面,不仅Java类是对象,Java 方法也是对象, 字节码常量池也是对象,一切皆是对象,JVM使用不同的oop-klass模型来表示各种不同的对象,需要的朋友可以参考下
    2023-08-08
  • maven 插件 assembly 打tar.gz包的详细过程

    maven 插件 assembly 打tar.gz包的详细过程

    这篇文章主要介绍了maven插件assembly打tar.gz包的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • SpringBoot开启异步调用方法

    SpringBoot开启异步调用方法

    这篇文章主要为大家详细介绍了SpringBoot开启异步调用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Spring Boot 实例化bean如何选择代理方式

    Spring Boot 实例化bean如何选择代理方式

    这篇文章主要为大家介绍了Spring Boot实例化bean如何选择代理方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Java9中新增的Collector收集器

    Java9中新增的Collector收集器

    这篇文章主要介绍了Java9中新增的Collector收集器,Collector作为收集器,简单来说就是将数据或元素收集到一起,并且flatMapping与收集器结合使用,通过提供智能元素集合进行分组。下文相关介绍需要的小伙伴可以参考一下
    2022-06-06

最新评论