网站首页 > java教程 正文
最近一直在写rust 的数据结构,回想Java 的数据结构,和rust 差别不大。其实不同的编程语言的数据结构是相通的,C++的童鞋肯定会想到STL。万变不离其宗,底层的数据结构还是大学的时候学的那点东西。无非是:数组、链表以及树,其他的东西都是在此基础之上演变出来的。
回到主题,我们介绍一个java的数据结构中常用的集合。java 的数据结构collection,有三种类型:list列表、queue队列以及set去重集合。另外一个map 主要存储kv 结构。
list下面有三种实现类:底层是数组的arrylist 以及底层是链表的 linkerlist,由于arrylist 底层是数组,插入的时间复杂度是O(n),查询的时间复杂度是O(1)。而linkerlist 正好相反,插入的时间复杂度是O(1),查询的时间复杂度是O(n)。vector 和arraylist 差别有两点:第一是线程安全,这个面试经常问的;第二是vector 扩容是按照100%扩容,而arraylist 是按照 50% 扩容。stack 继承了 vector 提供了先进后出能力
queue 比较简单提供了先进先出的能力,Deque则是提供两端插入和读取的能力,就是可以两端读写。priorityqueue 提供了排序的能力,按照优先级出队列。但它并非线程安全,如果需要线程安全请使用 PriorityBlockingQueue。
set 是去重集合,如果有相同的元素则只会保留一份。HashSet 底层是HashMap,LinkedHashSet 是通过 链表 + hash 表的方式实现,提供更优的插入性能。由于hash散列的特性,元素是无序的,另外一个接口是SortedSet 提供了排序的能力,具体实现类是TreeSet,底层通过树排序。
Map 主要是提供kv 存储,和set 类似,经常使用的是 hashmap,hashmap会通过hash 算法计算数组中的位置,如果发生了hash 冲突,则会通过链表或者树存储。LinkedHashMap底层则是链表方式存储元素,TreeMap 和 TreeSet一样提供排序功能。
猜你喜欢
- 2024-09-10 java基础:ArrayList集合(java arraylist常用方法)
- 2024-09-10 Java 集合了解多少?(java集合的了解)
- 2024-09-10 还不懂Java集合框架?阿里架构师总结了这五点,看完至少能掌握99%
- 2024-09-10 Java 最细的集合类总结(java的集合类型)
- 2024-09-10 Java 集合图谱(java集合数据结构图解)
- 2024-09-10 java集合整理的详细说明(java集合类详解和使用)
- 2024-09-10 java集合超详解(java 集合详解)
- 2024-09-10 Java集合类(java集合类之list的arraylist之删除指定学生)
- 2024-09-10 Java 集合框架知识梳理(java 集合框架知识梳理图)
- 2024-09-10 Java入门教程-Java集合体系和容器分类
你 发表评论:
欢迎- 最近发表
-
- JUC系列之《CompletableFuture:Java异步编程的终极武器》
- SpringBoot+Jasync异步化改造狂降90%耗时,百万并发下的性能杀戮
- Java异步编程神器:CompletableFuture实战技巧
- Spring Boot 异步请求 + 虚拟线程性能提升?结果很意外
- 异步可以单线程,但高并发的异步肯定要用线程池
- Java线程实现原理及相关机制_java线程的实现
- java线程终止 interrupt 关键字详解
- Java处理百万级消息积压方案_java 实时处理亿级数据
- 阻塞模型将会使线程休眠,为什么 Java 线程状态却是 RUNNABLE?
- 安卓7系统设置永不休眠_android 设置永不休眠
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)