当前位置: 首页 > news >正文

java集合深入理解(一):java集合掌握多少才算合格

(一)概述

java集合是写代码时经常用到,面试时经常问到的一项基础知识。因此了解深入了解集合不管对写代码,或者是面试都有很大的帮助。作为一名合格的java程序员,你需要了解以下关于集合的知识:

1.集合的框架体系

2.Collection接口的特点和使用

3.List和Set接口的特点和使用

4.List接口和Set接口的实现类学习

5.Map接口的特点和使用

6.Map接口的实现类学习

7.Collections工具类的使用

集合的学习方向也分成两方面:

1.应用层面

2.理解层面

应用层面就是对集合的使用,比较简单。理解层面就相对来说比较复杂,需要看一些集合的源码,了解其中的底层实现逻辑。理解之后要能说出各个集合之间的对比,比如:

1.Collection和Map的对比

2.List和Set的对比

3.ArrayList和Vector对比

4.ArrayList和LinkedList对比

5.HashMap和HashTable对比

6.Collection和Collections对比

......

我写这个系列博客的目的也是为了重新整理一下关于集合的知识体系,为接下来的面试做好准备。

(二)集合的特点与好处

说到集合肯定就会想到数组,因为两者都是用来保存一组数据。但是在用数组保存数据(尤其是对象)时存在一些弊端:

1.数组的长度必须提前指定,并且该数组的长度不能修改

2.数组只能保存相同类型的元素。

相比之下,集合就不具备上面的弊端:

1.集合在使用时不用指定长度,可以实现自动扩容

2.集合在没有指定泛型时,保存的对象是Object类型,指定泛型后可以保存对应的类型。

数组比较适合保存基本类型的元素,集合适合保存引用类型的元素,即对象

(三)集合的划分

集合主要分为两大块体系:Collection和Map。Collection保存单列的元素,Map保存双列的元素(键值对)

Collection接口:

Set:元素无序不可重复

List:元素有序可重复

Map接口:

Key-Value键值对集合

Collection接口的继承树如下所示:

Map接口的继承树如下所示

(四)总结

虽然在工作中集合的使用很简单,但是集合的原理一定要很扎实的掌握。集合的源码不算很难,因此看懂集合的部分源代码不仅更加深刻理解java有帮助,而且在面试中也能轻易过了集合这一关。关于这个系列的博客会在未来一个星期内更新完成。

相关文章:

  • 一分钟了解阿里云产品:数据传输
  • java集合深入理解(二):Collection接口的特点与理解
  • Msc系统上的eclipse遇到乱码问题解决方式
  • java集合深入理解(三):ArrayList、Vector、LinkedList的底层源码分析和对比
  • java集合深入理解(四):Set接口及其实现类HashSet、TreeSet的底层结构与区别
  • WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
  • java集合深入理解(五):HashMap、HashTable、TreeMap的底层源码分析和对比
  • java核心基础之java反射机制详解
  • Android Pdf文档的生成、显示与打印
  • java核心基础之代理机制详解(静态代理、动态代理:JDK、CGlib)
  • Spring事务管理详解(传播属性、隔离级别)
  • 5分钟学会使用Less预编译器
  • RabbitMQ学习系列(一):RabbitMQ的了解安装和使用
  • RabbitMQ学习系列(二):简单队列详解
  • spring学习笔记(4)依赖注入详解
  • hexo+github搭建个人博客
  • 【comparator, comparable】小总结
  • Brief introduction of how to 'Call, Apply and Bind'
  • CAP理论的例子讲解
  • css属性的继承、初识值、计算值、当前值、应用值
  • Docker下部署自己的LNMP工作环境
  • ESLint简单操作
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • javascript面向对象之创建对象
  • JS字符串转数字方法总结
  • MySQL的数据类型
  • Python socket服务器端、客户端传送信息
  • Spring Cloud中负载均衡器概览
  • yii2权限控制rbac之rule详细讲解
  • yii2中session跨域名的问题
  • 给初学者:JavaScript 中数组操作注意点
  • 时间复杂度与空间复杂度分析
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • ()、[]、{}、(())、[[]]命令替换
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)linux使用docker容器运行mysql
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET Micro Framework初体验(二)
  • .Net mvc总结
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET多线程执行函数
  • .NET框架类在ASP.NET中的使用(2) ——QA