随笔 - 95,  文章 - 0,  评论 - 0,  阅读 - 14253

※Java中的集合(数据结构)
--线性表
--链表
--栈
--队列
--散列表
--二叉树
--映射关系(key-value)




List集合:
ArrayList:ArrayList是线程不安全的、物理地址上是连续的
--有序的、可重复的、线性结构的(线性表)
List的工作原理:底层是通过数组来实现的,当存储的数据到达一定的个数的时候,会扩充集合的容量
//注意:所有的集合中存放的数据都是引用类型


练习:自己来实现一个ArraysList【根据工作原理来实现】
--添加
--删除
--替换
--遍历

Vector:Vector是线程安全的、有序的、可重复的
Vector中有一个子类Stack,是一个栈结构的集合,工作原理是先进后出 后进先出

LinkedList:是链表结构的集合、物理地址上不是连续的,通过引用指针的形式进行关联
--有序的、可重复的
LinkedList:即实现了Dueue列的接口,也实现了List的接口,拥有了队列和List的功能
思考:LinkedList和ArrayList的区别
LinkedList有对列的功能,ArrayList只有List的功能
练习:自己来实现一个LinkedList

 

练习:



Set集合:HashSet、LinkedHashSet、TreeSet
(无序的、不可重复的)
※HashSet:散列表结构




※LinkedHashSet:
它的特点:
利用了一个链表来维护迭代时的顺序, 所以输出元素时的顺序与插入时的顺序一致。但是存储位置依然是无序的 (不能通过下标访问)。
※TreeSet:
TreeSet 是利用红黑树的数据结构来存储元素的。
红黑树是一种平衡二叉树, 在添加和删除元素时, 会根据自身的情况调整树的结构, 而保持树的平衡性。
TreeSet 的使用有以下问题, 需要注意 :
add() 的进去的数据:
01 - 必须保证是同一种类型。
02 - 该类型必须是可排序的(元素必须实现某种协议) 。
即: 实现了 Comparable 接口。
自然排序的实现方法 : 存储的数据类型要实现 Comparable 接口, 重写 compareTo 方法


定制排序的实现方法 : 定义一个类实现 Comparator 接口, 重写 compare方法

练习:
使用二叉树存储学生
--name\sex\age\学科对象
--学科类
--subname
--scores
要求:根据学生的学科成绩进行排序


思考:Set集合和List哪一个可以根据索引获取元素
Set是无序的使用散列表结构存储数据,所以是不能通过索引来获取数据,而List是线性结构的,在存储上是连续的内存空间,所以List可以使用索引来获取数据

Queue集合:
PriorityQueue(队列):先进先出
--add添加数据
--poll获取并移除头部元素

Deque:双向队列(LinkedList、ArrayDeque)
(1) Deque 是 Queue 子接口。
(2) 在单向队列的基础上扩展, 双头出入队的功能。
入队:
addFirst(), offerFirst()
addLast(), offerLast()
出队:
pollFirst(), pollLast()
removeFirst(), removeLast()
获取元素
getFirst(), getLast()
peekFirst(), peekLast()
(3) 当栈来使用。
push(), pop()


Map集合:
什么是 Map ?
--map 是指一种用来存放映射关系数据的容器。
什么是映射关系 ?
--映射关系是指用一个键, 与一个值所组成的关系对一个键对应到一个值, 这个键是不能重复的, 所以, 通过键就能找到对应的值。


HashMap:无序 不能重复(key不能重复,如果有出现重复的则后面的覆盖前面的数据)
--使用put方法添加键值对数据,其中key可以为null
Hashtable 特性
[1] 是一个线程不安全的 Map 实现类
[2] 允许插入值为 null 的 key
遍历操作:





HashTable:无序 不能重复(key不能重复,如果有出现重复的则后面的覆盖前面的数据)
--使用put方法添加键值对数据,其中key不可以为null
Hashtable 特性
[1] 是一个线程安全的 Map 实现类
[2] 为了保证同步性, 性能比 HashMap 要差
[3] 不允许插入值为 null 的 key
[4] 底层使用散列表的存储方式(与 HashMap一致)
HashTable遍历操作:



LinkedHashMap通过链表来维护了数据插入的顺序 (和LinkedHashSet类似)

TreeMap通过二叉树结构进行存储(和TreeSet类似),是根据key来进行排序的,注意TreeMap中key需要实现可比较接口,value不需要

集合工具类
--排序Collections.sort(list);
--反转Collections.reverse(list);
--洗牌Collections.shuffle(list);
--交换Collections.swap(list, 1, 3);
--交换所有i处和j处的元素
--替换Collections.replaceAll(list, "123", "789");
--替换所有old的元素
--二分查找Collections.binarySearch(list, "12.33");
--集合需要正序排序
--复制操作Collections.copy(dest, src);
--来源集合src的长度要小于dest复制的目标集合的长度 copy(dest, src);

 

posted on   天涯何  阅读(59)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示