为什么要使用Java集合框架呢

【狂神说笔记—— Java基础08-集合框架】 阅读详情

  题序:很多时候,我们专心研究一个东西的时候,往往忘记了我们最初的目的是什么。

        曾经研究过那么久的Java集合框架,为了搞清里面的细节,甚至都跑去重新买了一本数据结构,终于知道了线性表,知道了树,知道了查找表。也自己动手实现了ArrayList,LinkedList,HashMap等。

        今天在公交车上,突然想到“我们为什么要使用Java集合框架呢?”竟然一时语塞,半天想不起来,也说不出个所以然呢。顿时悲从中来啊。还是决定再次好好复习一把,现总结如下:

 

 

    PS.还是那句老话,如果这些问题您都能轻松解答,没必要再浪费时间看下去了。

  • Question one:我们为什么要使用集合框架?
  • Question two:关于ArrayList 和Vector  (HashMap和HashTable)PS
  • Question three:总体把握,集合框架的继承图
  • Question four:set 于map的关系(见李兴华书)
  • Question five:关于set(底层实现,关于TreeSet,关于排序,关于比较对象相等)
  • Question six: 已经存在了那么多的动态结构,为什么需要hash表?
  • Question seven:TreeMap 底层实现

 

 

Question One:我们为什么使用集合框架?

  大家还记得我们为什么要使用数组嘛?

  当我们需要保持一组一样(类型相同)的元素的时候,我们应该使用一个容器来保存,数组就是这样一个容器。

  那么,数组的缺点是什么呢?

  数组一旦定义,长度将不能再变化。

  然而在我们的开发实践中,经常需要保存一些变长的数据集合,于是,我们需要一些能够动态增长长度的容器来保存我们的数据。

  而我们需要对数据的保存的逻辑可能各种各样,于是就有了各种各样的数据结构。我们将数据结构在Java中实现,于是就有了我们的集合框架。

 

    Question Two: List和Vector,HashMap和 HashTable 的区别在哪里呢?

   前者都是在JDK1.2后推出的,在前者中,因为采用异步处理方式,性能更高。

   (其实就是删掉了后者中操作数据{add ,remove等}时的线程同步锁,这样,效率更高了,但是却不再是线程安全的了,要线程安全,必须用户在程序中使用时自己控制。)

 

 

    Question Three:集合框架继承图

   本来想自己画个简图的,结果悲催的Rational Rose一直在抽风,也没时间去弄那个了。就网上Down了一个,暂且用着吧


                                        
 

   从这个图中,我们可以发现:Collection 接口包括List和Set两个子接口(其实还有Queue和Sorted两个子接口)

   另外,也验证了我们前面说的,Array和Collection都是用来保存数据的容器。

 

    Question Four:Set 和 Map 有什么关系?

   从Question Three的继承图中,我们很明显的发现:Map虽然不像Set那样属   于 Collection,但是Set和Map的继承图是如此的相似。那么,他们之间到底有什么样的   关系呢?

   从逻辑上来说:首先,如果我们只考察Map中的key,那么显然,这个key的集合就是一  个set:不能重复,无序。(Map中有keyset()的方法,能直接得到key的set)另外一   个层面,如果我们 将Map中的key何value当做一个整体,那么,显然,这个时候  的Map其实就是一个Set(在Map的实现中,都是通过一个内部类来将key和value当做  一个整体entity),

   从代码角度本身角度来看,无论是HashSet还是TreeSet其实使用的都是对应  的Tree来实现的,我们用一个默认的Object,这样就可以存了。

   而事实上Set的底层实现中,我们也可以发现,都是用对应的Map来实现的,只是,在每次存key-value 对的时候,都默认给了一个Object 类作为Value的默认值,

  

   Question five:关于set(底层实现,关于TreeSet,关于排序,关于比较对象相等)

   我们知道,Set是无序的,同时又是不能重复的,那么,这种不能重复性,是如何保证的呢? 其实这个问题问的还是不到位,Question Four已经说了,底层是由Map实现的,那么都是由Map来实现的。

   为了唯一性,重点是能识别相同的元素(如何判断相等)

   在Java中,=号,表示内存地址相等,即是指向堆内存的同一引用,那么此时,显然两个元素是相等的。

   当不是指向堆内存的同一引用时。我们就需要重写Object类的equals()方法了。在此,我们判断,如果我们需要比较的各个属性相等的话,那么则可认为这两个对象相等(关于属性相等的比较与此类似)

 

   Question six: 已经存在了那么多的动态结构,为什么需要Hash表?

   其实这个问题其实问的不恰当,应该是,有了诸如顺序表和有序表这样的静态表,诸如二叉排序树 平衡二叉树这样的动态表,为什么还需要Hash表呢?

   因为记录在表中的位置和它的关键字之间不存在一个确定的关系。查找的过程为给定值依次和关键字集合中各个关键字进行比较。查找的效率取决于和给定值进行比较的关键字个数。

 

    Question Seven: TreeMap 底层实现

    TreeMap 底层由红黑树(Red-Black tree)实现。因为此部分内容包括算法分析,具体代码实现以及性能分析,内容比较多,所以本部分内容稍后专门用一个日志来推出。(形式类似HashMap那篇日志)

 

【Java集合 1】java集合有哪些 一、数组Array和集合的区别 1、数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型) 2、JAVA集合可以存储和操作数目不固定的一组数据。 3、若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。  注:使用相应的toArray()和Arrays.asList()方法可以相互转换。 二、Java集合 集合类存放于Java.util包中。 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是 阅读详情

相关推荐

java 集合框架的原理及其使用

Java集合框架 系统的介绍java集合框架的应用

【Java集合】集合是什么?为什么要用集合?

Java集合介绍

Lov1_BYS的博客 929

中国1990-2021连续30年土地利用CLCD数据分享

CLCD(China Land Cover Dataset)数据集是由武汉大学黄昕老师基于Google Earth Engine上的335,709景Landsat数据制作的中国年度土地覆盖数据集。为了提高CLCD的时空一致性,还提出了一种包含时空滤波和逻辑推理的后处理方法。该数据集最大的优势在于每年30米的土地利用分类结果,且连续覆盖了30年时间。相比其他产品如GLC_FCS30、Global30、AGLC2000_2015、FROM-GLC10、ESA10、ESRI10等,CLCD在时间分辨率上更高。

qq_48539301的博客 1万+

Java 集合框架通俗易懂介绍

介绍Java集合框架的基础概念,适合初学者阅读和理解。

2301_78183173的博客 537

从零开始:用ADS 2023手把手教你设计2.4GHz Wi-Fi LNA(基于ATF-54143,附模型文件)

本文详细介绍了如何使用ADS 2023软件设计2.4GHz Wi-Fi频段的低噪声放大器(LNA),基于ATF-54143晶体管。内容涵盖模型导入、直流工作点确定、稳定性优化、噪声匹配等关键步骤,并提供可下载的模型文件包,帮助工程师快速掌握LNA设计技巧。

weixin_42531128的博客 320

避坑指南:Docker部署PaddleOCR-VL服务时,关于flash-attn安装、端口映射和模型加载的那些坑

本文详细记录了Docker部署PaddleOCR-VL服务时遇到的常见问题及解决方案,包括flash-attn安装、GPU兼容性检查、容器生命周期管理、模型加载优化等关键环节。特别针对不同GPU架构提供了flash-attn的安装策略,并分享了端口映射、配置文件处理等实用技巧,帮助开发者高效避坑。

weixin_33686714的博客 463

【java基础】集合详解

文章主要介绍List和Map相关知识,详解ArrayList和HashMap的重要原理

qq_40782372的博客 263

基于51单片机的多功能智能路灯控制系统(仿真+代码+原理图)

智能路灯控制系统主要由51单片机最小系统+1602显示模块+DS1302时钟模块+光强检测模块+按键输入模块+声光报警模块+LED照明模块+状态检测电路+人体车辆红外检测模块组成。能实现以下功能: 1.能够按键设定系统时间、工作时间、光照阈值 2.工作时间内路灯点亮,凌晨12点后路灯关闭,有人或车通过是,路灯点亮10s 3.非工作时间光照强度低于阈值,路灯点亮 4.能够检测系统工作状态,路灯应亮未亮,声光报警 5.具备手动控制,能够切换自动/手动控制功能

u012759563的博客 8176

java-集合理解

java集合说明

weixin_47521669的博客 841

详解Agent Skills:让AI拥有更多专业能力(什么是Agent Skills?如何创建?如何使用?如何获取?)

本文分享如何将零散指令沉淀为可复用的 AI 能力模块🧩,介绍什么是Agent Skills?如何创建?如何获取?📚

XiaoqiangClub的博客 1269

华为OD机试 - 计算误码率(Python/JS/C/C++ 双机位C卷 100分)

移动通信 网络中的误码率主要是指比特误码率,其计算公式如下:比特误码率 = 错误比特数 / 传输总比特数,为了简单,我们引入字符串来表示误码通信的信息,一个字符错误了,就认为出现了一个误码。我们需要将这两个压缩字符串解压成实际的字符序列,然后逐位比较它们,统计误码(不同字符)的数量。题目给出两个经过压缩编码的字符串,通过解压缩后需要判断两个字符串在解压后的误码率,即对应位置不同的字符数量占总字符数量的比例。输入一个标准的字符串,和一个传输前的字符串,计算误码率。两个解压后的字符串完全相同,没有错误字符。

学Java,找哪吒 2193

java集合有什么用_Java为什么要有集合?集合有什么用?

image在学习集合之前,我们需要思考的是为什么要有集合?集合有什么用?我们知道,在java中有数组的概念,数组可以用来存放一组数据。但是,数组是固定长度的,这样在使用的时候就会有很多的不方便,比如说资源的浪费。这个时候,我们就希望有一种可以动态改变大小的数组,那就是集合的作用了。Java 所有的集合类都位于 java.util 包下,提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及...

weixin_30988079的博客 1382

configure: error: no acceptable C compiler found in $PATH解决方案

本文主要介绍了configure: error: no acceptable C compiler found in $PATH解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 4万+

Java、什么是集合框架?什么是集合?为什么要使用集合框架?学习集合框架资源推荐!!!

原文链接. Java Collections Framework介绍 您知道Niklaus Wirth所说的著名的编程公式吗? 就这个: 数据结构+算法=程序 这意味着计算机程序是以有组织的方式保存信息的数据结构与处理信息以产生所需结果或输出的算法的组合。 如果您是在大学学习计算机工程的,您可能熟悉链表,队列,堆栈,树等数据结构的概念。还记得您进行了一些练习,以使用C / C ++编程语言实现这些数据结构吗? 在Java编程语言中(完全在JDK中),您不必重新发明轮子,即从头开始实现数据结构和算法,因为J

qq_30906791的博客 325

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【Java】为什么需要使用集合框架

集合概念:存放多个元素内容 框架:底层封装好 提供简单的api 给开发人员使用 java框架:spring springmvc 集合框架:JDK帮助我们封装好的 ArrayList / Map / Set 为什么需要学习Java中集合框架呢? 原生的数组 在 存放数据 在最开始定义容量的大小,在以后如果 继续存放数据,可能 容量无法装下的。就会报错...

Jack 159

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JAVA中为什么要使用集合框架

我们为什么使用集合框架?   大家还记得我们为什么要使用数组嘛?   当我们需要保持一组一样(类型相同)的元素的时候,我们应该使用一个容器来保存,数组就是这样一个容器。   那么,数组的缺点是什么呢?   数组一旦定义,长度将不能再变化。   然而在我们的开发实践中,经常需要保存一些变长的数据集合,于是,我们需要一些能够动态增长长度的容器来保存我们的数据。   而我们需要对数据的保存的

tanyunlong_nice的专栏 1585

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

这里为什么要用Map?那里为什么要用Set?Java集合框架使用选择!

在编程实践中,我们经常需要处理各种类型的数据集合。无论是用户信息、订单数据,还是系统日志,都需要合适的数据结构来存储和操作这些数据。然而,在Java中,存在着众多的集合类型,如何选择最适合自己需求的集合类型,成为了一个需要深入思考的问题。本文将探讨Java集合框架中的不同集合类型,以及它们在实际应用中适合存储哪些信息。通过上面的介绍,我们可以看到Java集合框架中的各种集合类型在实际应用中都有着广泛的应用场景。

weixin_57333931的博客 1308

15.为什么要使用Java集合框架(List、Set、Map...)?泛型集合?

一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,把这种Java对象称为集合(1)对外的接口(2)接口的实现(3)对集合运算的算法:表示集合的抽象数据类型,如Collection、List、Set、Map、Iterator:集合框架中接口的具体实现,最常用实现:ArrayList、LinkedList、HashMap、HashSet:在一个实现了集合框架中的接口的对象上完成某种有用的计算机算法。

相互学习 共同进步 580

java中的集合框架

01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架。 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护。 集合完全弥补了数组的缺陷。 02.集合框架的内容 集合框架都包含三大块内容:对外的接口,接口的实现和对集合运算的算法 01.接口:表示集合的抽象数据类型 02.实现:集...

weixin_30263073的博客 79

遍历接口传过来的数组_Java集合框架概述和集合的遍历

第三阶段 JAVA常见对象的学习集合框架概述和集合的遍历(一) 集合框架的概述(1) 集合的由来如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。通常,程序总是根据运行时才知道的某些条件去创建新对象。在此之前,不会知道你所需要对象的数量,甚至不知道确切的类型。为了解决这个普遍的编程问题,需要在任意时刻和任意位置创建任意数量的对象。所以,就不能依靠创建命名的引用来持...

weixin_31433527的博客 118

util包中的集合框架

public class Stu<T> { T sid; String sname; }

qq_62881798的博客 154

集合框架和泛型0425

复习:一、为什么要使用泛型?对象不知道具体数量,变长。需要存储更复杂的对象。二、集合框架集全框架就是一些接口和类。有的性能上有优势,有的使用更方便。Map、Collection、Iterator三者之间,有关联,没有直接的继承关系。Collections和Arrays,都是工具类,独立的,也没有从其他地方继承。这两货是算法,是工具,用来给集合:排序,遍历,查找,很合适。实体类中的这几个,是真正用的...

Golden_soft的专栏 226

Java集合框架之一-------集合框架概览及迭代

1.集合框架概览 接口:List,Set,Queue, Deque, SortedSet 接口:map 2.迭代 2.1 Iterator public interface Iterator&lt;E&gt; { 如果迭代具有更多的元素,则返回true 。 (换句话说,如果next()返回一个元素而不是抛出一个异常, 则返回true ) boolean hasNext()...

huangwei18351的博客 230

为什么要使用集合框架?

很多时候,我们专心研究一个东西的时候,往往忘记了我们最初的目的是什么。         曾经研究过那么久的Java集合框架,为了搞清里面的细节,甚至都跑去重新买了一本数据结构,终于知道了线性表,知道了树,知道了查找表。也自己动手实现了ArrayList,LinkedList,HashMap等。         今天在公交车上,突然想到“我们为什么要使用Java集合框架呢?”竟然一时语塞,半天想

梦想从这里开始 1254

java语言中为什么需要集合框架这种技术?

我们过去学的数组只含有数量固定的对象,相对简单。但是,马克-to-win: 如果我们的程序有这样的要求,即只有运行时才能知道对象的类型或数量而且需要我们把这些对象存在某种容器中,这时显然数组就不胜任了。这时我们就必须用到集合框架。java自带的集合框架给了我们一些集合类作为工具。利用这些集合类,我们可以容纳乃至操纵自己的可变数量的自定义对象。 下图给出了常用的集合框架中的集合类: 集合框架...

qq_44639795的博客 350
上一篇: java 路径
下一篇: 提高工作效率的方法
easyjsf
博客等级 码龄17年 19粉丝 82原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值