没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
2021/11/22 下午11:21
Java 集合与数据结构详解
https://gitbook.cn/books/610506c0035c157f05068621/index.html
1/25
Java 集合与数据结构详解
查看本场Chat
(/gitchat/activity/60fb8bde11f41c3fb3afb195)
贾斯汀 (/gitchat/author
…
(/gitchat/author/5d08ed9e11ce7c0efdc80c80)
我努力奔跑,只为追上那个被给予厚望的自己
前言
由浅入深:集合框架介绍
各类集合:List、Map、Set
ArrayList
Vector
LinkedList
HashMap
集合遍历:为什么要用迭代器
删除元素怎么删
集合扩展:泛型与通配符
类型通配符
数据结构:栈、队列、数组、链表与红黑树
数组
链表
栈、队列
红黑树
排序算法:冒泡、选择、插入
冒泡排序
选择排序
插入排序
百年老题:HashMap 源码分析
(/)
2021/11/22 下午11:21
Java 集合与数据结构详解
https://gitbook.cn/books/610506c0035c157f05068621/index.html
2/25
put() 方法
位运算示例
扩容
树化的过程
get 方法
结语
前言
好久不见咯兄弟们,有一段时间没过来写 Char 了,发现 40 个订阅也能发文章了。但是无一例
外的还是最后关头才凑够了 40 个人,也发现里面有一些“老朋友”,真的感谢你们的支持。
正值八月份,秋招基本都要开始了,大厂是最喜欢问 数据结构、网络、多线程的,希望我分
享这些东西能帮到大家就业或者提高自身水平。
由浅入深:集合框架介绍
在 Java 中,我们需要在程序运行时能有一个容器按照一定规范存放一些关键数据,同时又要
保证灵活高效的对数据进行增删查改等操作,所以就诞生了各中不同类型的集合接口,根据不
同的业务需求去选择合适的集合存储数据。
(/)
2021/11/22 下午11:21
Java 集合与数据结构详解
https://gitbook.cn/books/610506c0035c157f05068621/index.html
3/25
Java 集合框架主要包括两种类型 的容器,一种是集合(Collection) ,存储一个元 素集合,另
一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和
Queue , 再 下 面 是 一 些 抽 象 类 , 最 后 是 具 体 实 现 类 , 常 用 的 有 ArrayList 、 LinkedList 、
HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
各类集合:List、Map、Set
这些集合的性质是要求背出来的,面试极其容易被问。
list( 列表)线性表:
1. List 可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改
变,数据越多需要挪动的数据也就越多,所以效率就会越差;
(/)
2021/11/22 下午11:21
Java 集合与数据结构详解
https://gitbook.cn/books/610506c0035c157f05068621/index.html
4/25
2. 数组是通过下标找到对应数据的,所以随机查找快;
3. 数组在内存上是连续的。
4. 是有序的,可重复 有序说的是插入的顺序和实际的位置相关
set(表)线性表:
是无序的,不可重复。检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置
改变。
map(映射):
1. Map(映射)用于保存具有映射关系的数据,Map 里保存着两组数据:key 和 value,它
们都可以使任何引用类型 的数据,但 key 不能重复。所以通过指定的 key 就可以取 出对
应的 value。
2. map 是通过引用指向来找到下一个数据的,所以 map 集合查找慢,插入删除快。
3. map 的本质是链表,在内存空间上不一定是连续的。
4. 数据结构是数组 + 链表 + 红黑树。
List、Set 都是继承自 Collection 接口,Map 则不是。
ArrayList
ArrayList 是实现 List 接口的可扩容数组,它的内部是基于数组实现的。
ArrayList 可以实现所有可选择的列表操作,允许所有的元素,包括空 值。ArrayList 还提
供了内 部存储 list 的方法,它能够完全替代 Vector,只有一点例外,ArrayList 不是线程
安全的容器。
ArrayList 有一个容量的概念,这个数组的容量就是 List 用来存储元素的容量。
ArrayList 不是线程安全的容器,如果多个线程中至少有两个线程修改了 ArrayList 的结构
的话就会导致线程安全问题。
ArrayList 具有 fail-fast 快速失败机制,能够对 ArrayList 作出失败检测。当在迭代集合的
过 程 中 该 集 合 在 结 构 上 发 生 改 变 的 时 候 , 就 有 可 能 会 发 生 fail-fast , 即 抛 出
ConcurrentModificationException 异常。
Vector
(/)
2021/11/22 下午11:21
Java 集合与数据结构详解
https://gitbook.cn/books/610506c0035c157f05068621/index.html
5/25
Vector 同 ArrayList 一样,都是基 于数组实现的,只不过 Vector 是一个线程安全的容器,它对
内部的每个方法都简单粗暴的上锁,避免多线程引起的安全性问题,但是通常这种同步方式需
要的开销比较大,因此,访问元素的效率要远远低于 ArrayList。
还有一点在于扩容上,ArrayList 扩容 后的数组 长度会增 加 50%, 而 Vector 的扩容长度后数 组
会增加一倍。
LinkedList
LinkedList 是一个双向链表,允许存储任何元素(包括 null)。它的主要特性如下:
LinkedList 所有的操作都可以表现为双向性的,索引到链表的操作将遍历从头到尾,视哪
个距离近为遍历顺序。
注意这个实现也 不是线程安全 的,如果多个 线程并发访问 链表,并且至少其中的一个线
程修改了链表的结构,那么这个链表必须进行外部加锁。
HashMap
HashMap 是一个利用哈希表原理来存储元素的集合,并且允许空的 key-value 键值对。
HashMap 是非线程安全的,也就是说在多线程的环境下,可能会存在问题,而 Hashtable 是
线程安全的容器。
HashMap 也支持 fail-fast 机制。HashMap 的实例有两个参数影响其性能︰初始容量和加载因
子。可以使用 Collections.synchronizedMap(new HashMap( . ..)) 来构造一个线程安
全的 HashMap。
此外还有很多集合子类,这里不再一一举例。
集合遍历:为什么要用迭代器
删除元素怎么删
先上代码
(/)
剩余24页未读,继续阅读
王佛伟
- 粉丝: 13
- 资源: 320
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 上市公司-人工智能的采纳程度面板数据(2003-2021年).xlsx
- 第5章spring-mvc请求映射处理
- 2023-04-06-项目笔记 - 第一百十六阶段 - 4.4.2.114全局变量的作用域-114 -2024.04.27
- app-release.apk.1
- soap json 等系列化方式
- c++的五子棋代码,在vs6.0上完美运行
- 基于Javaee的影视创作论坛的设计与实现.rar
- Python导出Mysql数据字典(部分表或全表)
- Java工具类实现输入一个路径,强创建路径、并且鉴权目标路径是否具备修改权限,用于增强程序的健壮性与稳定性,快速开发!
- 资源【STM32+HAL】三轴按键PS2摇杆
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0