Java常见数据结构以及特点

Java中常见的数据结构,主要分为Collection和Map两种主要接口,程序中的数据结构是继承这些接口的数据结构类。

Collection接口

  1. List 接口继承:ArrayList、 Vector、 LinkedList等实现;

  2. Set 接口继承:HashSet、LinkedHashSet、TreeSet等实现。

Map接口: HashMap、SortedMap继承,LinkedHashMap、TreeMap等实现。

几个常用的类及其特点:

ArrayList

  • 数据结构:ArrayList底层使用的是Object数组;
  • 存储结构:物理存储单元上连续的存储结构;
  • 线程是否安全:线程不安全的;ArrayList是非同步的,方法没有加锁;
  • 特点:方便查找,但是新增和删除操作的时候,是要有移动位置的操作,所以ArrayList适用于存储,查询操作比较频繁的数据存储。

LinkedList

  • 数据结构:LinkedList底层使用的是双向循环链表数据结构;
  • 存储方式:物理存储单元上非连续、非顺序的存储结构;
  • 线程是否安全:线程不安全的;
  • 特点:存储每一个元素消耗的空间要比ArrayList大,并且由于它的存储结构,导致他的查询不是很方便,需要去遍历每一个节点,然后查找该节点后继节点,不适合存储需要大量查询操作的数据存储,但插入比ArrayList方便,不需要进行换位操作,只需要改变指针前驱和后继,增删操作很快,不耗费多余资源 。

List总结

  • 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ]
  • 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ]
  • 所有的List中可以有null元素,例如[ tom,null,1 ]
  • 基于Array的List(Vector,ArrayList)适合查询,而LinkedList 适合添加,删除操作

Vector

  • 数据结构:Vector底层使用的是Object数组;
  • 存储结构:物理存储单元上连续的存储结构;
  • 线程是否安全:Vector是线程安全的,Vector类的方法都是有锁的;
  • 特点:Vector是线程安全的,可以由多个线程访问一个Vector对象。但当一个线程访问的话,保证线程安全会消耗一定的资源,因此一个线程访问就无需考虑是否线程安全的问题,建议使用ArrayList。

TreeSet

  • 数据结构:底层数据结构是二叉树;
  • 线程是否安全:不保证线程安全的;
  • 特点:有序的,并且没有重复元素。可以指定一个顺序,排序后按升序排列元素 。

HashSet

  • 数据结构:链表和红黑树(jdk1.8以后);
  • 线程是否安全:不保证线程安全的;
  • 特点:元素没有顺序(因为底层用的是HashMap,HashMap本身中的元素度没有顺序)、元素不能重复,不可随机访问包含的元素 ,只能用Iterator实现单向遍历,多次迭代访问,元素的顺序可能不同 。

Set总结

  • Set实现的基础是Map(HashMap);
  • Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象。

HashMap

  • 数据结构:链表和红黑树(jdk1.8以后);
  • 线程是否安全:非线程安全;
  • 特点:Null可以做主键,但只能有一个,可以有多个Value为Null;适用于在Map中插入、删除和定位元素。

TreeMap

  • 数据结构:树;
  • 线程是否安全:非线程安全;
  • 特点:有序的,适用于按自然顺序或自定义顺序遍历键(key)。

LinkedHashMap

  • 数据结构:HashMap+LinkedList;
  • 线程是否安全:非线程安全;
  • 特点:有序、Key和Value都允许空、Key重复会覆盖、Value允许重复。

Java 中, 什么查询最快?

根据数组下标, 查找数组的元素, 是Java中天下第一快的操作!

数组和ArrayList 的区别:

  • 数组可以存储数据类型一致的一组数据, 没有提供操作算法, 使用数组需要自行编写算法, 使用数组编码的专用算法,
    性能最佳!而ArrayList也可以存储一组数据, 其内部也是数组, 还提供操作算法, 使用方便. 通用算法好处是使用方便,
    算法是经过检验的, 非常可靠。但是如果期望高性能, 使用数组, 如期望高开发效率, 使用Arraylist。

Vector、ArrayList和LinkedList使用

大多数情况下,从性能上来说ArrayList最好,但是当集合内的元素需要频繁插入、删除时LinkedList会有比较好的表现,但是它们三个性能都比不上数组。所以:

  • 如果能用数组的时候(元素类型固定,数组长度固定),请尽量使用数组来代替List;
  • 如果没有频繁的删除插入操作,又不用考虑多线程问题,优先选择ArrayList;
  • 如果在多线程条件下使用,可以考虑Vector;
  • 如果需要频繁地删除插入,LinkedList就有了用武之地;
  • 如果你什么都不知道,用ArrayList没错。

Java常见数据结构以及特点、使用场景相关推荐

  1. 数据结构软件测试,资讯详情-java常见数据结构-柠檬班-自动化测试-软件测试培训-自学官网...

    Java中常见数据结构 1.LinkedList 双向链表 特点: 1. 物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现 每个元素包含三个节点,一个是存储元素的数据 ...

  2. 笔记整理4----Java语言高级(四)16 JAVA常用API-高级+17 泛型与常见数据结构+18 Map与Set集合+19 异常处理+20 IO流-高级

    16 JAVA常用API-高级+17 泛型与常见数据结构+18 Map与Set集合+19 异常处理+20 IO流-高级 第05天 API 今日内容介绍  Object类 & System类 ...

  3. Java基础 常见数据结构与算法 项目总结

    Java基础 1 Java基础必知必会 1.1 Java语言有哪些特点? 面向对象(封装,继承,多态): 平台无关性,平台无关性的具体表现在于,Java 是"一次编写,到处运行(Write ...

  4. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  5. redis hash删除所有key_一文详解Redis面试中常见的5种数据结构及对应使用场景

    欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享! Java架构筑基​zhuanlan.zhihu.com Java架构筑基--专注于Java技术的研究与分享! 后续文章 ...

  6. 【面试经典】redis 常见数据结构以及使用场景分析

    1.String 常用命令: set,get,decr,incr,mget 等. String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字. 常规key- ...

  7. java 二叉树 红黑树_常见数据结构(二)-树(二叉树,红黑树,B树)

    常见数据结构(二)-树(二叉树,红黑树,B树) 标签: algorithms [TOC] 本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自course ...

  8. Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)

    Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...

  9. Java常见的乱码解决方式

    JAVA几种常见的编码格式(转) 简介 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码问题 ...

最新文章

  1. php 动态设置utf8,PHP对GB编码动态转UTF-8几种方法评测
  2. 【CSS+HTML】关于字体的说明
  3. P3512 [POI2010]PIL-Pilots(单调队列+二分)
  4. SET CONSTRAINTS DEFERRED | IMMEDIATE
  5. 索引超出了数组界限_【每天一题】LeetCode 26. 删除排序数组中的重复项
  6. 【Oracle AWR详解分析-02】
  7. no target device found怎么解决_关于移动端开发 1px 线的一些理解和解决办法
  8. 哎呀,人家不小心变油腻了呢
  9. wordpress导入数据错误MySQL返回:#1273 – Unknown collation:’utf8mb4_unicode_ci’
  10. python与建筑结构设计_29个常见的结构设计问题盘点
  11. 23.24复合求积公式
  12. Linux进程调度策略
  13. Flutter技术简介
  14. 文字前的小图标HTML,Font Awesome实现文字链右边加一个箭头图标
  15. ​PDF怎么转换成Word?试试这几种好用的转换方法
  16. 计算机软考职称属于哪个大类,计算机软考职称是什么
  17. STATA如何查找命令的帮助文件
  18. 流利说AI刘扬:从教授到”AI虚拟老师“
  19. 树莓派-实时视频监控
  20. Spring cloud Eureka consumer 调用 provider ERROR:java.net.UnknownHostException: XXX-PAYMENT-SERVICE

热门文章

  1. 关于二叉树的链表表示的一个问题
  2. 3dmax导出fbx时如何带贴图_houdini | 第一章 第三节 贴图与顶点动画
  3. 小森林顺序_英桥镇彩虹幼儿园趣味亲子活动—森林运动会
  4. 郎凤娥谈定西实施煤粉锅炉改造项目
  5. JavaEE Tutorials (15) - 对Java持久化API应用使用二级缓存
  6. JavaScript 各种遍历方式详解
  7. live555的编译及使用
  8. Windows系统编程之进程同步试验
  9. 我的linux Mint之路(三)
  10. 制定和实施网络安全事件响应计划(1)