首页 > 编程语言 >Java集合框架主要接口及实现类详解

Java集合框架主要接口及实现类详解

时间:2023-11-29 21:22:06浏览次数:55  
标签:Java ArrayList 元素 接口 Vector 集合 详解

Java集合框架是Java编程语言提供的一组接口,用于处理对象集合。Java集合框架中包括了一系列的接口、实现类和算法,可以方便地操作和管理各种类型的集合数据。

Java集合框架主要包括以下接口:

  • Collection接口:是所有集合接口的根接口,提供了基本的集合操作,如添加、删除、遍历等操作。
  • List接口:是Collection接口的子接口,提供了有序的集合,可以通过索引访问集合中的元素。
  • Set接口:也是Collection接口的子接口,提供了无序的集合,集合中不允许有重复元素。
  • Map接口:是一个映射接口,提供了一种将键映射到值的方式,可以通过键来访问值。

 

Java集合框架中的实现类主要有:
1.ArrayList类:实现了List接口,提供了可变长度的数组,可以通过索引访问集合中的元素。

  • 大小可变:ArrayList类可以根据需要自动调整大小。
  • 随机访问:ArrayList类支持随机访问,可以像数组一样使用索引来访问元素。
  • 速度快:ArrayList类通常比Vector类更快,因为它是多线程,线程是不安全的。
  • 可以包含任何类型的对象:ArrayList类可以容纳任何类型的对象,包括基本类型和引用类型。
  • 查询效率高:因为有索引可以肆意查询任意元素,但在插入删除方面较慢,因为这两个操作一旦发生,后面所有元素的索引都随之改变,例如删除一个元素,那么此元素后面的所有元素都会自动往前顶一位;插入一个元素,那么此元素后的所有元素都会自动往后推一位


2.LinkedList类:同样实现了List接口,提供了基于链表的集合,可以高效地进行插入和删除操作。

  • 链结点:LinkedList中每个元素都是一个链结点对象,每个链结点对象包括该元素的值和前后两个链结点的引用。
  • 随机访问:由于LinkedList没有像数组一样的索引,因此不能像ArrayList那样进行随机访问。
  • 插入和删除效率快:LinkedList在进行插入和删除操作时,只需要修改前后链结点的引用即可,因此这些操作比ArrayList快。
  • 内存占用少:由于LinkedList的实现方式,每个元素只需要存储它的值和前后两个链结点的引用,因此内存占用比ArrayList少。

3.Vector类:是一个动态数组,它可以在运行时自动调整大小。它类似于数组,但它的大小是可变的,而不是固定的。

  • Vector是一个可以自动增长和缩小的动态数组,它能够存储任意数据类型的对象。
  • Vector是单线程,所以线程是安全的,在多线程环境下,可以通过synchronized关键字来保证Vector中的操作是原子性的。
  • Vector实现了List接口,因此它可以使用List中定义的方法,如:add()、remove()、get()等。
  • Vector中的元素可以通过索引来访问和修改,索引的范围从0到size()-1。
  • Vector中的元素可以重复,也可以为null值。
  • Vector在添加或删除元素时,如果容量不足会自动增长容量,以保证元素能够全部存储。
  • Vector还提供了一些其他的方法,如:capacity()、ensureCapacity()、setSize()等。

 

4.HashSet类:实现了Set接口,提供了无序的集合,不允许有重复元素。

  • HashSet实现了Set接口,因此它不能包含重复的元素;HashSet也是一个无序的集合,并不能保证元素的顺序。
  • HashSet使用哈希表来存储元素,因此它可以快速地进行添加、删除、查找等操作。
  • HashSet不是线程安全的,如果多个线程同时操作同一个HashSet实例,可能会导致意想不到的结果。
  • HashSet可以包含null元素,但只能包含一个null元素。

 

5.TreeMap类:实现了Map接口,提供了一种基于红黑树的映射,可以通过键来访问值,键是有序的。

  • TreeMap是一个有序的集合,它根据键的自然顺序进行排序,或按照构造函数中提供的Comparator进行排序。
  • TreeMap中不允许存储重复的键。如果试图添加已经存在的键,它将会覆盖之前的值。
  • TreeMap实现了SortedMap接口,因此它可以使用SortedMap中定义的方法,如:firstKey()、lastKey()、subMap()等。
  • TreeMap使用红黑树来存储元素,因此它可以快速地进行添加、删除、查找等操作,时间复杂度为O(log n)。
  • TreeMap不是线程安全的,如果多个线程同时操作同一个TreeMap实例,可能会导致意想不到的结果。
  • TreeMap可以包含null键,但不可以包含null值。

在Java集合框架中还包括了一些算法,如排序算法和查找算法。

Java集合框架提供了非常强大的功能,可以方便地进行各种集合操作,大大提高了Java程序的开发效率。

标签:Java,ArrayList,元素,接口,Vector,集合,详解
From: https://www.cnblogs.com/xy0713/p/17865891.html

相关文章

  • SQL HAVING 子句详解:在 GROUP BY 中更灵活的条件筛选
    SQLHAVING子句HAVING子句被添加到SQL中,因为WHERE关键字不能与聚合函数一起使用。HAVING语法SELECTcolumn_name(s)FROMtable_nameWHEREconditionGROUPBYcolumn_name(s)HAVINGconditionORDERBYcolumn_name(s);演示数据库以下是Northwind示例数据库中“Customers......
  • Java——lambda表达式
    一、概述简化代码开发,可以实现函数式的编程。利用函数式的编程可以避免面向对象过程中一些的繁琐的问题lambda是一把双刃剑二、使用场景1.能够使用lambda表达式的一个重要依据是必须有相应的函数接口。所谓函数接口,是指内部有且仅有一个抽象方法的接口。2.la......
  • java集合框架(三)ArrayList的常见使用
    1、ArrayList简介在集合框架中,ArrayList是一个类,实现了List接口:1.ArrayList是以泛型的方式实现的,使用时必须先实例化2.ArrayList实现了randomAccess接口,所以ArrayList支持随机访问3.ArrayList实现了cloneable接口,ArrayList时可以克隆的4.ArrayList不是线程安全的,(Vector是线程......
  • Java系列---【时间格式合法性校验】
    #不能用LocalDate.parse(),解析不了20230231,默认会解析成20230228,并且不抛异常,用Strict模式,虽然会抛异常但无法解析20230201,推荐下面的publicstaticbooleanisValidDateFormat(Stringdate,Stringformat){if(date.length!=format.length){returnfalse;}......
  • java 令牌解析_SpringSecurity 原理解析【4】:令牌还原与Session String changeSessio
    java令牌解析_SpringSecurity原理解析【4】:令牌还原与SessionStringchangeSessionId();//修改SessionIdSpringSecurity原理解析【4】:令牌还原与SessionSession:一般称为会话,不同环境中含义不同,在SpringSecurity中一个会话指:客户端从令牌认证请求到登出注销请求之间的......
  • java基础学习:random随机数,random案例
    1.Random使用步骤:  packagecom.itheima.Random;importjava.util.Random;publicclassRandom1{publicstaticvoidmain(String[]args){Randomrandom=newRandom();for(inti=1;i<=10;i++){intdata=random.nextInt(1......
  • JAVA的swap实现
    JAVA的swap实现JAVA不能操作地址,所以不能像CPP那样方便地实现对基本数据类型的swap。java中的基本数据类型传递属于引用传递,并不会像c/c++实现指针传递;通过包装类对象配合反射可以实现数据的交换。只能通过以下几种方式。通过数组对象交换publicclassTestSwap{ publi......
  • Java 8 仍被广泛使用,占比 50%
    调查中,更多的开发人员选择在生产中使用Java17,而不是Java11。Docker逐渐成为打包Web应用程序的首选,且Spring和SpringBoot的使用率遥遥领先。具体而言,开发者最常使用的 Java版本是 Java8,占比高达 50%;其次分别是 Java17(45%)、Java11(38%)以及 Java20(11%......
  • 接口请求重复调用,只保留最后一个请求的返回结果
    在前端开发中,有时候我们需要确保即使发起了多次相同的请求,也只处理最后一次请求的响应。这种需求在搜索输入提示、自动完成或者连续的数据更新操作中比较常见。为了实现这个功能,我们可以使用取消之前请求的策略,或者通过标记的方式来确保只处理最后一次请求的结果。以下是使用Java......
  • 学习笔记1 :Java基础
    1、JVM(1)Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境。(2)JVM包括:一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域(3)跨平台:JVM在执行字节码时,把字节码解释成具体平台上的机器指令执行。一套代码,一次编译,多平台运行。但是,不同平台需要不......