Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >集合系列开篇:为什么要学集合?

集合系列开篇:为什么要学集合?

作者头像
陈树义
发布于 2019-08-26 09:33:21
发布于 2019-08-26 09:33:21
9830
举报
文章被收录于专栏:陈树义陈树义

集合可以说是学习 Java 中最重要的一块知识点了,无论做任何业务系统,集合总是最为基础的那块 API。我第一次接触集合,是在我大三的时候,那时候去面试,面试官问我:你了解过集合吗?可惜那时候没什么项目经验,所以基本没有了解过,因此也错失了机会。

到了现在,我已经工作了5年了,也做过了大大小小十几个项目。这些项目中有简单的 SSH 项目,也有分布式高并发的复杂项目。无论在哪个项目中,关于集合的时候是必不可少的。但我现在慢慢回顾过去做的项目,我发现自己使用到的集合还是比较少,基本上只有:ArrayList、HashSet、HashMap 这几个。

但当我开始深入去了解 JDK 集合的整个体系时,我发现之前的我了解得确实非常浅显。例如关于 List 的实现有 ArrayList、LinkedList、Vector、Stack 这四种实现,但我们很多时候只是直接使用 ArrayList,而不是根据场景去选择。

1.学习集合源码,能够让我们使用得更加准确。

当我们深入学习了源码之后,我们就能够了解其特性,从而能够根据我们的使用场景去做出更好的选择,从而让我们的代码运行效率更高。

我们举一个最简单的例子 —— ArrayList 和 LinkedList。它们两者底层采用了完全不同的实现方式,ArrayList 使用数组实现,而 LinkedList 则使用链表实现。这使得 ArrayList 的读取效率高,而 LinkedList 的读取效率低。但因为 LinkedList 采用链表实现,所以其增加和删除比较方便,而 ArrayList 则比较麻烦。所以 ArrayList 比较适合用于读场合较多的情况,而 LinkedList 比较适合用于增加、删除较多的场景。

我们来看另外一个例子 —— HashMap 和 TreeMap。乍看之下,他们都是 Map 集合的实现,但是它们内部有着截然不同的实现。HashMap 是 Map 接口的哈希实现,其内部使用了链表和红黑树实现。而 TreeMap 是 Map 接口的有序实现,其内部使用了红黑树实现。所以 HashMap 一般用来存储 key、value 的实现,而 TreeMap 常用存储需要排序的元素。

除了我们举的这两个例子之外,还有许多这样的例子,比如:HashMap 与 LinkedHashMap 的区别,HashMap 与 WeakHashMap 的区别,LinkedList 与 ArrayDeque 的区别。

2.学习集合源码,让我们学习经典的设计方式。

在集合的整个架构设计中,其类继承体系非常简单,但是却很经典。例如:Collection 接口设计了集合通用的操作,每个集合类型都有对应的接口(List、Set、Map),每个集合类型都有对应的抽象实现(AbstractList、AbstractSet、AbstractMap)等。

当我们阅读这些源码的时候,这种设计方式都会潜移默化地影响我们。当我们之后自己设计一个框架的时候,我们就会不知不觉地用上去。所有的创新都是从模仿开始的,所以阅读优秀的集合源码很重要。

3.帮助通过面试,获得更高的薪酬。

现在关于集合的原理是 Java 工程师面试的家常菜,几乎每一个企业的面试都会问到。如果你连这块东西都没搞清楚,那么你就不需要聊其他了,直接被干掉。而如果你能将整个 Java 集合体系清晰地说出去,并且举一反三地对比,那么你就比其他人优秀了。

4.学习经典的数据结构

还记得大学在学习数据结构的时候,我们都是从理论上去记忆。但是当我看完集合源码之后,我忽然发现——JDK集合源码简直就是数据结构的最佳实践呀!

数据结构中最为基础的几个结构为:顺序表、单链表、双向链表、队列、栈、二叉堆、红黑树、哈希表。这些所有的实现都能在 JDK 集合的实现中找到。例如:ArrayList 就是顺序表的实现,LinkedList 就是双向链表的实现,Stack 就是栈的实现,HashMap 就是哈希表的实现,TreeMap 就是红黑树的实现,PriorityQueue 就是二叉堆的实现。

5.所有技术的基础

集合源码可以说是 JDK 所有源码中最为简单的一块了,而且也是其他所有源码的基础。例如线程池的源码中也大量使用了阻塞队列,如果你连集合源码都搞不懂,那么线程池的源码你也肯定看不懂的。而如果线程池源码看不懂,那么你 netty 的源码也看不懂的。netty 源码看不懂,那么 dubbo 的源码也是看不懂的。

看明白了么?这些技术都是一换扣着一换的。如果你想要后续学习更加快速,那么你就必须把最基础的东西学明白了。如果连最基础的东西都没学明白,就直接去学其他更复杂的东西,最后只会越来越难,最终逃脱不了放弃的命运。

读到了这里,我相信你也对集合的重要性有了不一样的认识。那么接下来一段时间,就让我和你一起来深入学学集合源码吧。如果觉得读了有用,那么请给我一个赞吧。你们的赞是我继续写下去的动力!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
老哥,您看我这篇Java集合,还有机会评优吗?
集合在我们日常开发使用的次数数不胜数,ArrayList/LinkedList/HashMap/HashSet······信手拈来,抬手就拿来用,在 IDE 上龙飞凤舞,但是作为一名合格的优雅的程序猿,仅仅了解怎么使用API是远远不够的,如果在调用API时,知道它内部发生了什么事情,就像开了透视外挂一样,洞穿一切,这种感觉才真的爽,而且这样就不是集合提供什么功能给我们使用,而是我们选择使用它的什么功能了。
cxuan
2020/08/07
5960
老哥,您看我这篇Java集合,还有机会评优吗?
Java 集合常见知识点&面试题总结(上),2022 最新版!
Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有三个主要的子接口:List、Set 和 Queue。
Guide哥
2022/11/07
3460
Java 集合常见知识点&面试题总结(上),2022 最新版!
你真的了解Java集合吗?
Java集合是我认为在Java基础中最最重要的知识点了,Java集合是必须掌握的。我在面试的时候,只要是面到Java,那一定是少不了Java集合。
故里
2020/11/25
6450
你真的了解Java集合吗?
50道Java集合经典面试题(收藏版)
Collection.sort是对list进行排序,Arrays.sort是对数组进行排序。
捡田螺的小男孩
2020/06/19
9170
50道Java集合经典面试题(收藏版)
「Java面试题精华集」1w字的Java集合框架篇(2020最新版)附PDF版 !
一个多月前,我和一些小伙伴决定做一系列的 Java 知识点常见重要问题的小册,方便用来夯实基础!小册的标准就一个,那就是:取精华,取重点。每一本小册,我们都会充分关注我们所总结的知识点是否达到这个标准。
Guide哥
2020/06/28
1.3K0
「Java面试题精华集」1w字的Java集合框架篇(2020最新版)附PDF版 !
聊聊我的知识体系
不知不觉树义已经工作 5 年了,一路走来磕磕碰碰但总算有了自己的一点小体会。对于一个 Java 开发人员来说,到了 5 年的关键节点,需要掌握哪些知识点呢?经过我自己的总结,我列出了下面的思维导图。
陈树义
2019/05/08
5211
聊聊我的知识体系
关于集合中一些常考的重点知识点总结
Java的集合框架中可以分为两大类:第一类是按照单个元素存储的 Collection 集合,其中 Set, List, Queue 都实现了 Collection 接口。第二类是按照 Key-Value 存储的 Map 集合。
帅地
2019/03/11
6600
关于集合中一些常考的重点知识点总结
关于集合中一些常考的知识点总结「建议收藏」
Java的集合框架中可以分为两大类:第一类是按照单个元素存储的 Collection 集合,其中 Set, List, Queue 都实现了 Collection 接口。第二类是按照 Key-Value 存储的 Map 集合。
全栈程序员站长
2022/09/20
2440
Java集合框架常见面试题
从下图可以看出,在 Java 中除了以 Map 结尾的类之外, 其他类都实现了 Collection 接口。
Vincent-yuan
2021/08/13
6650
Java集合框架常见面试题
Java 集合(List、Set、Map 等)相关问答归纳再整理
注:最近因个人原因,更新速度可能会相对慢一些,这段时间过去就会缓和很多,公众号会持续更新。我也在用这段时间,好好沉淀一下自己。希望能给大家带来更好的文章。
BWH_Steven
2021/03/15
8430
初识集合框架
这图我们看下就行,不要求强记里面的类和接口,在之后的学习里会一一讲解这里面的类和接口。
E绵绵
2024/04/17
1050
初识集合框架
Java集合面试题(2021最新版)
马上到今年的金三银四了,又是跳槽的好季节,准备跳槽的同学都摩拳擦掌准备大面好几场,本次小编为大家准备了精选的 Java 集合面试题,快来查漏补缺吧。
Java程序猿
2021/04/30
11.6K0
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾要点解析
我将从Java集合的基础概念入手,介绍常见集合类型,再深入剖析HashMap的底层数据结构、源码实现及应用实例,助你全面掌握相关知识。
用户11683055
2025/06/02
710
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾要点解析
2018-06-13 关于Java集合的小抄
原文地址: http://calvin1978.blogcn.com/articles/collection.html 在尽可能短的篇幅里,将所有集合与并发集合的特征、实现方式、性能捋一遍。适合所有"精通Java",其实还不那么自信的人阅读。 期望能不止用于面试时,平时选择数据结构,也能考虑一下其成本与效率,不要看着API合适就用了。 1.List 1.1 ArrayList 以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组。因此最好能
Albert陈凯
2018/06/19
7490
集合系列(一):集合框架概述
Java 集合是 Java API 用得最频繁的一类,掌握 Java 集合的原理以及继承结构非常有必要。总的来说,Java 容器可以划分为 4 个部分:
陈树义
2019/08/24
6570
集合框架底层数据结构总结
主要根据集合的特点来选用,比如我们需要根据键值获取到元素值时就选用Map接口下的集合,需要排序时选择TreeMap,不需要排序时就选择HashMap,需要保证线程安全就选用ConcurrentHashMap.当我们只需要存放元素值时,就选择实现Collection接口的集合,需要保证元素唯一时选择实现Set接口的集合比如TreeSet或HashSet,不需要就选择实现List接口的比如ArrayList或LinkedList,然后再根据实现这些接口的集合的特点来选用。
Java那些事儿
2020/07/21
5260
Java集合框架的全面分析和性能增强
Java集合框架在Java编程中起着至关重要的作用。它提供了一系列的数据结构和算法,用于存储、操作和访问数据。然而,为了充分利用集合框架的强大功能,开发人员需要深入了解其内部机制,并注意性能优化。本博客将深度解析Java集合框架的核心组件,包括List、Set、Map等接口及其实现类,同时提供优化技巧和示例,助力新手更好地理解和学习。
默 语
2024/11/20
1420
Java基础19:Java集合框架梳理
本文介绍了Java集合类的基本框架,接口结构以及部分源码分析,并且通过自己实现一些集合类来更好地剖析Java集合类的整体结构。
程序员黄小斜
2019/04/07
6250
四大集合20连问,抗住!
业务开发究竟要使用LinkedList还是ArrayList?ArrayList查询性能更高,但LinkedList插入、删除效率更高。
JavaSouth南哥
2024/10/28
1990
四大集合20连问,抗住!
这几道Java集合框架面试题在面试中几乎必问
本文会同步更新在我开源的Java学习指南仓库 Java-Guide (一份涵盖大部分Java程序员所需要掌握的核心知识,正在一步一步慢慢完善,期待您的参与)中,地址:https://github.com/Snailclimb/Java-Guide,欢迎star、issue、pr。
用户2164320
2018/08/23
5750
这几道Java集合框架面试题在面试中几乎必问
相关推荐
老哥,您看我这篇Java集合,还有机会评优吗?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档