工作中需要用到的Java知识(集合篇)

工作中需要用到的Java知识(集合篇)

上一篇我提到了基本数据类型,引用数据类型String,还有StringBuffer和StringBuilder的作用与区别,这些内容是我们在进行开发中经常会用到的内容,当我们了解了这些之后我们应该了解一下集合
其实在集合之前我们还有一些其他的内容,但是我这个可能是单纯的复习,不是系统的学习,所以一些内容就不说了,如果有大佬有更深的理解或更好的内容,请分享给我,谢谢啦。

1.集合类型

集合在工作中也经常会遇见,其实Java语言进行WEB后端开发的时候,全都是数据库内容的增删改查存取功能。当我们在数据库查询出了多条数据,我们该如何将数据提取出来呢?这时候我们就需要用到集合来将内容提取出来,之前我写了List集合与Map集合在Mybatis中的运用,这两种集合类型在工作中是用的最多的。接下来我会大概说一下我理解的集合类型以及什么时候使用。

①集合简介
集合是一个容器,当我们需要保存很多条数据时我们就会用到集合,集合一共分为两种,一种是实现Collection接口,另一种是实现Map接口
集合类型
这就是集合的家族,有很多分支,其中每个内容都有他们各自的特点,但是单单在我的工作中常用的有ArrayList,HashMap这两种集合,当我们创建了实体类的时候我们可以用List<Object>来接收内容,当我们不想创建对象时我们可以用Map<String, String> 来接收对应键的value,Set集合用的比较少,基本上就是用来将List集合进行去重用的。

②集合遍历比较
既然有了集合那我们就不能避免需要遍历集合中内容,那我们如何遍历呢?遍历集合就一定有效率,有可能我们需要遍历的集合是一个很大的集合,我目前使用的遍历集合方式是使用for循环遍历List集合使用forEach遍历Map集合

为什么要采用这种方式来遍历集合呢,原因是List集合继承了AbstractList类,这个类实现了RandomAccess接口,

通过Collections类的binarySearch()方法我们可以看到里面有用到RandomAccess,它先判断集合是否实现了RandomAccess从而判断是使用indexedBinarySearch()方法还是iteratorBinarySearch()方法,也就是说这两个方法才是决定ArrayList是如何进行快速随机访问的关键

Collections类中的binarySearch()
这两个方法才是影响遍历速度的根本原因,当实现RandomAccess接口后使用for循环遍历快,当没有实现RandomAccess接口时使用forEach或迭代器遍历快。同理你也可以去找找Set集合该如何遍历呢?

备注:
⚪ 由于ArrayList是线程不安全的,当我们需要线程安全的使用集合时,我们可以使用Vector集合,暂时我还没有用到,这个类型的集合线程是安全的,不过要花费大量的时间。

⚪ 我们还可以使用同步类型的List,使用方式为:
线程安全的List集合
通过Collections.synchronizedList()方法变为线程安全的集合

③Set集合
我们简单说一下Set集合,这个集合是基于HashMap实现的,当我们创建一个Set集合时,会创建一个对应的Map集合。
创建一个TreeSet集合

我们存放的所有值,都是作为Map集合的Key存在的,Value的值都固定为PRESENT。
Set集合中的value
当我们添加内容时,就会调用Map集合的put方法,向集合中添加元素
Set集合的add方法
此时,我常用的Collection下的集合就介绍完了,一些其他的方法当具体使用的时候我们再去学习,但是还有一种类型我们没有说到,那就是Queue类型。
Queue类型是队列,在工作中我没有遇到需要使用这个类型的情况,这个类型的内容我暂时也没有理解,好像是用到了生产者消费者模型,这个等过一段时间学习到了以后再来分享一下吧,不好意思啦。

我终于来填坑啦,有需要的查看下面的文章↓
工作中需要用到的Java知识(Queue队列篇)

④Map集合
Map集合是一个键值对形式的集合,HashMap是基于Hash表中Map接口的非同步实现,无论是HashMap还是TreeMap,他们的Key都是不可重复的,这是因为每添加一个键值对,首先会得到这个键值对中Key的HashCode值,看是否相同,如果不相同则放入一个数组中,如果相同则通过equals()方法比较两个值是否相同,如果相同则替换,如果不同则放入链表。
Map集合原理展示
JDK1.8以后,当链表长度大于8,数组长度大于64时,就会形成红黑树,以减少搜索键值对时所用的时间。

HashMap与HashTable的区别
有的面试题中会询问这两个内容的区别,区别就是HashMap线程不安全,HashTable线程安全,但是HashTable是过时的,在代码编程中不要使用HashTable这个类如果需要使用线程安全的,可以使用ConcurrentHashMap

HashMap与TreeMap的选择
当我们删除添加元素比较多的时候选择HashMap;当我们遍历元素比较多的时候选择TreeMap,我这个也是在网上看到的哈,嘿嘿

LinkedHashMap集合
跟HashMap集合差不多,只不过多维护了一个双向链表,这么做需要一定空间,所以性能就要差一点,不过他是按插入顺序进行排序的,如果需要将集合按照插入顺序排序,可以选择这个集合。

identityHashMap集合
同样与HashMap集合差不多,只不过HashMap是用hashCode方法与equals方法来比较相等的,而identityHashMap集合是使用\“==\”来判断相等的用来排重

SortedMap集合
用来进行有排序需要的集合,其中有获取第一个元素和最后一个元素的方法。

NavigableMap集合
在 SortedMap 基础上,支持快速搜索符合条件的最近的元素。

TreeMap集合
实现了NavigableMap集合,支持排序的Map集合。

WeakHashMap集合
当内存不足的时候,WeakHashMap集合会将没有使用的键值对进行垃圾回收弱键回收机制),所以很少会报出内存不足异常。

ConcurrentHashMap集合
ConcurrentHashMap 集合是将表进行分段锁,在JDK1.8后又进行了升级,在线程安全的基础上又提升了速度。

集合类我觉得了解这些就可以了,如果想要深入了解一下集合类,友情推荐一篇帖子:
Java集合容器面试题(2020最新版)

如果有兴趣的同学可以看看这个。

查看下一篇请戳这里↓
工作中需要用到的Java知识(Java概念篇)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文档是本人5年JAVA经验整理的文档(持续性的),由于CSDN只能单个附件只能上传15MB,所以只好分包压缩了(4个包),希望各位同行能够理解。 本文档包括JAVA/FLEX/数据建模/Database/移动办公/项目管理/单点登录/软件架构/测试等相关性技术。 本文档还在持续维护,各位可以通过《笔记变更说明》查看升级日志。 在这里声明下,本文档一部分是个人从学习、工作整理出来的(代码都是经过调试的),还有一部分是从网上整理的。 本站相关文档都是经过后期整理的,或是在实际工作整理的实例代码总结而成的。 由于本人目前允许上传的资源太小,所以无法上传整个的技术学习笔记(JAVA 五年的工作经验和学习笔记),待以后有机会会分享给大家。 技术体系包括: J2SE/J2ME/J2EE/JAVA代码优化/Flex(BlazeDS、PureMVC等技术)/LDAP/C++/Portal/即时通讯/数据建模/UML/UML设计工具(Rose、EA、PD等)/移动办公(Android、Symbian、Wap等技术)/项目管理(敏捷开发等)/软件架构(NoSQL、SaaS、设计模式等)/数据库(MySQL、Oracle、EDB、SQLServer等)/测试(单元测试、压力测试)/linux服务器等 其含有大量实例源代码。 这里需要说明的时,该文档是本人5年工作经验的积累,文档大部分知识点来源于实际工作的总结,(除了JAR等资源文件外)其代码都是可运行的,还有一部分知识来源于网络或者其他书籍,这里做一些收集,使该体系更加完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值