java基础之集合类

本文深入解析Java集合框架,包括Collection和Map两大核心接口及其子接口和实现类的特点与应用场景,如Set、List、Queue等,并对比了不同集合类的性能表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java集合主要由两个接口派生而出:CollectionMap,也就是说Collection和Map是所有集合类的根接口。Iterator也是集合框架的成员,用来遍历Collection集合

Collection接口

这里写图片描述

Set

无序集合,且元素不可重复,可以说Set就是Collection,只是行为略有不同,即元素不能重复

HashSet

  1. 特点
    无序
    多线程中,两个货以上线程操作一集合,需要程序员手工保证同步
    值可为null

  2. HashSet如何保证每次添加的元素不重复?
    调用HashCode()方法获得该对象的hashcode,看集合中是否有相同的hashcode,如果有,则表示该对象在集合中已存在;如果没有,则可以插入。
    LinkedHashSet
    与HashSet相似,也是用hashcode来决定存放位置,不同之处在于LinkedHashSet使用链表来维护元素的次序,因此插入到LinkedHashSet中的元素是有序的,顺序在链表中维护。

TreeSet

是sortedSet的实现类,可以确保元素处于排序状态。因为它的这个特点,因此它相比hashSet增加如下方法:
1、Object first():获取第一个元素
2、Object last():获取最后一个元素
3、Object lower():获取指定元素之前的元素。
4、。。。。。请看源码~

排序方式
1、自然排序
用compareTo(来自comparable接口)方法比较元素大小按升序排序
2、定制排序
即自定义排序方式,可以用lamda表达式来代替Comparable接口

EnumSet

通过枚举值来决定Set顺序

Set性能

hashSet与treeSet谁的性能好?
hashset,因为treeset的顺序需要进行大小比较后才能确定,而hashset省去了这一步。
hashset与linkedhashset的性能呢?
当然是hashset,因为linkedHashSet还需要维护链表哦~

List

有序集合,元素可重复,根据索引来操作集合,所以可以达到有序的效果。

ArrayList和vector

arrayList和vector都是基于数组的,所以他们都分配了一个动态的允许再分配的Object[]数组
vector方法是jdk1.0的时候就有的古老的方法,当时没有考虑到系统的集合框架,所以它提供了很多方法名很长的方法,后来用List替代了,其实和现在用的List并没有区别。而且Vector是线程安全的,因此性能会低,因为它对当前线程加锁,其他只能等待。
ArrayList是线程不安全的,需要程序员手动保证集合同步

LinkedList

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable

从上面的源码可以看出它实现了List还实现了Deque,因此它具有栈和队列的双重特点。

Queue

队列,“先进先出”,即队列的头部存放时间最长,尾部存放时间最短

Deque

Queue的实现类,是“双端队列“,即两头可以同时怎删数据。

Priority

Queue的实现类,按队列元素的大小进行排序
排序方式
自然排序
定制排序

Map接口

这里写图片描述
key-value,Map的key类似一个Set集合、value类似List集合可以重复。

HashTable与HashMap

HashTable从jdk1.0开始就有,是线程安全的,性能较低,而HashMap则与前者相反,所以需要程序员手动使集合同步。

LinkedHashMap

笔者感受

Map和Set非常相似,只不过Map是key-value形式的,所以Map处不再赘述。hashset用了map中的key来存放e,因为key可以保证不重复,这样去掉了原始set在存数据之前需要用hashcode进行去重比较的问题,提高了效率
学习之旅刚开始,再接再厉~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值