Java学习总结

1. Java集合体系框架

java.util中包含 Java 最常用的the collections framework。

Java集合类主要由两个根接口Collection和Map派生出来的。

  • Collection 接口派生出了三个子接口List、Set、Queue。
  • Map 接口

因此Java集合大致也可分成List、Set、Queue、Map四种接口体系。

2 Collection 接口

Collection 接口派生出了三个子接口List、Set、Queue。

2.1 List 接口

List 接口:有序可重复集合,可直接根据元素的索引来访问

List接口常用的实现类有:ArrayList、LinkedList、Vector。

2.1.1 List 集合特点

  • 集合中的元素允许重复
  • 集合中的元素是有顺序的,各元素插入的顺序就是各元素的顺序
  • 集合中的元素可以通过索引来访问或者设置

2.1.2 List 实现类

ArrayList:Java中的实现List接口的类,底层使用数组来存储元素。但与数组相比,它具有更灵活的大小和动态的增加和删除元素。允许任何符合规则的元素插入甚至包括null,每一个ArrayList都有一个初始容量(10),该容量代表了数组的大小。ArrayList擅长于随机访问,同时ArrayList是非同步的。

Vector:与ArrayList相似,但Vector是同步的,它的操作与ArrayList几乎一样。

LinkedList:LinkedList是List接口采用双向循环链表的实现,除了可以根据索引访问集合元素外,LinkedList还实现了Deque接口,可以当作双端队列来使用,也就是说,既可以当作"栈"使用,又可以当作队列使用。

2.2 Set 接口

Set:无序不可重复集合,只能根据元素本身来访问

Set接口常用的实现类有:HashSet、LinkedHashSet、TreeSet

2.2.1 Set 实现类

HashSet:hSet底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高,可以存储null元素,元素的唯一性是靠所存储元素类型是否重写hashCode()和equals()方法来保证的,如果没有重写这两个方法,则无法保证元素的唯一性。

LinkedHashSet:底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。

TreeSet:底层数据结构采用二叉树来实现,元素唯一且已经排好序,唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。

2.3 Queue

Queue:队列集合,支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列)

2.3.1 Queue 实现类

PriorityQueue :PriorityQueue保存队列元素的顺序并不是按照加入的顺序,而是按照队列元素的大小进行排序的。

PriorityQueue不允许插入null元素。

Deque:Deque接口是Queue接口的子接口,它代表一个双端队列,当程序中需要使用"栈"这种数据结构时,推荐使用ArrayDeque。

3 Map 接口


Map 接口:存储key-value对的集合,可根据元素的key来访问value

3.1 Map 实现类

HashMap:Map接口基于哈希表的实现,是使用频率最高的用于键值对处理的数据类型。它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,特点是访问速度快,遍历顺序不确定,线程不安全,最多允许一个key为null,允许多个value为null。

可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap类。

Hashtable:Hashtable和HashMap从存储结构和实现来讲有很多相似之处,不同的是它承自Dictionary类,而且是线程安全的,另外Hashtable不允许key和value为null,并发性不如ConcurrentHashMap。

Hashtable不建议在新代码中使用,不需要线程安全的场合可以用HashMap替换,需要线程安全的场合可以用ConcurrentHashMap替换。

LinkedHashMap:LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现,它维护着一个双重链接列表,此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。

TreeMap:TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序),也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。

3.2 Map 实现类总结

原文链接

https://blog.csdn.net/m0_67322837/article/details/124322953

相关推荐
IT枫斗者枫哥3 分钟前
Java 接口超时后,重试为什么会多建一条任务?
java
用户3126874877208 分钟前
CAS 到底是怎么保证原子性的?从 Unsafe 到 VarHandle 的演进
java
Zane199413 分钟前
线上突然OOM,你的排查顺序是先看日志还是先重启
java·后端
会飞的拖把16 分钟前
Python 多任务编程:并发、进程、线程与线程安全详解
开发语言·python
君顾125 分钟前
折扣卡 CPS 小程序定制:从业务流程到系统架构的实践指南
java·开发语言·折扣卡
见不散27 分钟前
GPT-5.6 Luna (Batch) 批量处理能力深度评测
java·gpt·batch
老猿讲编程42 分钟前
【Eclipse OpenSOVD学习之六】 数据访问层(DataProvider)
学习·eclipse·嵌入式软件·车载·sovd
计算机毕设定制辅导-无忧学长1 小时前
《基于SpringBoot的庭院玫瑰栽培养护知识交互式科普平台设计与实现》
java·spring boot·后端·毕业设计·个性化推荐·协同过滤算法·庭院玫瑰栽培养护知识科普平台
浔溺1 小时前
al+大数据每日学习笔记36
大数据·笔记·学习
坚定学代码1 小时前
static在c++中的使用
开发语言·c++