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

集合框架 - Collection单列集合

01 集合体系的介绍

【1】什么是集合:集合就是存放数据的容器,Java根据不同的业务场景提供给了我们很多具有不同特点的集合。

【2】集合的分类:① 以Collection为例的单列集合 ② 以Map为列的双列集合。

【3】单列集合的特点:每个元素只会存储一个数据。

【4】双列集合的特点:每个元素会存储两个数据(键值对)。

02 Collection单列集合

02_01 Collection体系

【1】Collection是一个泛型接口,这个接口只规定了一些基本的特点,增删查改。

【2】Collection有很多的子接口,其中List和Set这两个是我们着重要学的。

【3】List系列集合的特点:有序,可重复,有索引。(有序是指输入和输出的顺序是一致的)

         ArrayList和LinkedList实现类的特点:同上。

【4】Set系列集合的特点:无序,不重复,无索引。

         HashSet:同上。

         LinkedHashSet:有序,不重复,无索引。

         TreeSet:按照元素大小默认升序排序,不重复,无索引。

02_02 Collection常用方法

【说明】:对于toArray()方法,如果非要用类似Stirng[]的变量接返回值,则书写格式为:

                  String[] a = list.toArray(new String[list.size()]);

                  提示:Object[]和String[]等类似的写法是不具备父子关系的。

02_03 Collection遍历方式

02_03_01 迭代器遍历

【1】介绍:迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator

【2】遍历步骤:使用集合对象调用iterator方法,得到一个Iterator对象,然后使用Iterator对象调用hasNext,next方法配合遍历。

【3】说明:迭代器对象一旦拿到它会指向集合中第一个元素,hasNext方法用于判断当前位时是否有元素存在,next方法用于返回迭代器对象当前所指向的元素,并更新指向位置指向下一个。

【4】使用迭代器遍历时只能判断一次获取一次,否则会出bug。

【5】迭代器越界会出现:NoSuchElementException。

02_03_02 增强for

【1】介绍:增强for循环可以遍历集合,也可以遍历数组,本质其实也是使用迭代器进行遍历。

02_03_03 lambda表达式

【1】介绍:lambda是JDK8开始新增的一个语法,Java通过通过结合lambda表达式提供了一种更简单,直观的方式来遍历集合。

【2】遍历步骤:使用集合对象调用forEach方法,forEach方法的参数是一个Consumer函数式接口对象 ... 具体见下图:

02_03_04 补充:集合中存储的是元素的什么信息

答:集合中存储的是元素的地址信息。

02_04 List系列集合

02_04_01 特点,特有方法

02_04_02 遍历方式

02_04_03 ArrayList集合的底层原理和应用场景

【1】特点:

    ① 基于数组实现。

    ② 根据索引的查询速度快。 

    ③ 删除添加数据效率低。

【2】ArrayList集合的应用场景:

   ① 适合:经常需要根据索引查询数据;数据量少

   ② 不适合:数据量大且经常进行增删操作。

02_04_04 LinkedList集合的底层原理和应用场景

【1】链表:链表是由一个个节点组成的,每个节点里分为数值域和指针域。

【2】链表的特点:每次根据索引查询时都要从头遍历,所以查询效率低;

                               由于增删操作并不涉及到数据的大范围移动所以相对数组增删数据的效率较快。

【3】LinkedList底层是双向链表,根据索引的查询速度要比单链表的快,因为在查询之前可以根据索引大小判断从哪一头开始查找更快;

                                                       增删数据的效率相对数组来说也是相对较快的,

                                                       对于首尾元素增删查改的效率非常高

【应用场景】:

02_05 Set系列集合

02_05_01 特点

02_05_02 HashSet集合的底层原理

【说明】:扩容时会进行二倍扩容。

【说明】:哈希表中的红黑树大小是根据哈希值的大小排的。

02_05_03 LinkedHashSet集合的底层原理

02_05_04 TreeSet集合

【说明】:

     ① 我们在TreeSet集合中放的是自定义类型的对象,在使用比较器比较时,如果比较的结果相等则会直接认为是重复元素。

     ② 当我们既实现了Comparable接口,又实现了CompareTo接口,会选择CompareTo中的比较规则进行排序。

02_06 应用场景总结

02_07 集合的并发修改异常问题

02_08 可变参数

02_09 Collections工具类

【注意】:Collections工具类的shuffle,sort方法只能传List系列的集合!!!

相关文章:

  • WeChat_DevTools 断点调试方法总结
  • 0x09 瑞友 应用虚拟化系统 GetBSAppUrl SQL注入漏洞 - 复现
  • 图像超分辨率(SR)
  • linux系统的常用命令
  • GPIO端口的使用
  • 牛客周赛 Round 61(思维、组合数)
  • 关于三维布尔运算的思考(2)
  • 深入理解 WebSocket:实时通信的利器
  • 如何使用 DomCrawler 进行复杂的网页数据抓取?
  • InnoDB架构
  • Mavn解决依赖不重新下载,主动下载依赖
  • 什么?你想通过网络安全月入千万?看看AI的回答(包含注释版)
  • 自动化学习3:日志记录及测试报告的生成--自动化框架搭建
  • Django 数据库配置以及字段设置详解
  • 深入理解 Nuxt.js 中的 app:created 钩子
  • JavaScript-如何实现克隆(clone)函数
  • [deviceone开发]-do_Webview的基本示例
  • C# 免费离线人脸识别 2.0 Demo
  • CentOS 7 修改主机名
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Javascript基础之Array数组API
  • JavaScript设计模式与开发实践系列之策略模式
  • Linux Process Manage
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • rabbitmq延迟消息示例
  • Spring Cloud中负载均衡器概览
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 从0到1:PostCSS 插件开发最佳实践
  • 从tcpdump抓包看TCP/IP协议
  • 从零开始学习部署
  • 你不可错过的前端面试题(一)
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 正则表达式
  • ​什么是bug?bug的源头在哪里?
  • #Z0458. 树的中心2
  • $(function(){})与(function($){....})(jQuery)的区别
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (done) 两个矩阵 “相似” 是什么意思?
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (笔记)M1使用hombrew安装qemu
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (三)模仿学习-Action数据的模仿
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)Neo4j下载安装以及初次使用
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ***原理与防范
  • *Django中的Ajax 纯js的书写样式1
  • .net CHARTING图表控件下载地址
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET 设计模式—适配器模式(Adapter Pattern)