JavaSE 集合框架及背后的数据结构
目录
- 1 介绍
- 2 学习的意义
- 2.1 Java 集合框架的优点及作用
- 2.2 笔试及面试题
- 3 接口 interfaces
- 3.1 基本关系说明
- 3.2 Collection 常用方法说明
- 3.3 Collection 示例
- 3.4 Map 常用方法说明
- 3.5 Map 示例
- 4 实现 classes
- 5 Java数据结构知识体系
- 5.1 目标
- 5.2 知识点
1 介绍
集合: 是什么? 它把数据结构全部封装好了!!!比如ArrayList的背后其实就是顺序表。
Java集合框架Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。
其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索retrieve 、管理 manipulate ,即平时我们俗称的增删查改 CRUD 。
例如,一副扑克牌(一组牌的集合)、一个邮箱(一组邮件的集合)、一个通讯录(一组姓名和电话的映射关系)等等。
类和接口的总览图如下图所示:
图中浅黄色的代表接口,浅蓝色的代表抽象类,深黄色的代表具体实现类。比如Collection接口和Iterable接口之间就是拓展extends关系;AbstractList这个抽象类和List之间就是implements关系。Collection接口一般存储“单个”元素;Queue接口代表队列,Set接口代表集合(数学意义上的集合),List接口代表顺序表、链表。迭代器就比如我们遍历数组用for循环,那么遍历集合就可以用Iterator来进行遍历;对象比较有Comparable和Comparator;操作数组的工具类Arrays,操作集合的工具类Collections。
所以对于上面这张图我们目前要认识到两个点:(1)关系:接口-接口;类-接口。(2)每一个具体的实现类到底实现了哪些接口。
集合有很多,为什么?
答:因为集合背后都是数据结构。描述和组织数据的方式不一样,造就了有这么多的数据结构,也就是为什么有这么多的集合,也就是场景不一样。
2 学习的意义
2.1 Java 集合框架的优点及作用
- 使用成熟的集合框架,有助于我们便捷、快速的写出高效、稳定的代码。
- 学习背后的数据结构知识,有助于我们理解各个集合的优缺点及使用场景。
2.2 笔试及面试题
腾讯-Java后台开发面经:
- HashMap 了解不,介绍一下,如果一个对象为 key 时,hashCode 和 equals 方法的用法要注意什么?
- HashSet 和 HashMap 的区别是什么?
- HashMap 是线程安全的么?那需要线程安全需要用到什么?
阿里巴巴-Java后台开发面经:
- ArrayList 和 LinkedList 的区别是什么?
- 有了解过 HashMap 的具体实现么?
- HashMap 和 ConcurrentHashMap 哪个效率更高?
今日头条-Java后台开发面经:
- 编程题:判断一个链表是否是一个回文链表。
- Redis 的 zset 类型对应到 java 语言中大致是什么类型?
- hashCode 主要是用来做什么用的?
3 接口 interfaces
3.1 基本关系说明
Collection: 用来存储管理一组对象 objects,这些对象一般被称为元素elements。
- Set : 元素不能重复,背后隐含着查找/搜索的语义。
- SortedSet : 一组有序的不能重复的元素。
- List : 线性结构。
- Queue : 队列。
- Deque : 双端队列。
Map: 键值对 Key-Value-Pair ,背后隐含着查找/搜索的语义。
- SortedMap : 一组有序的键值对。
3.2 Collection 常用方法说明
方法签名 | 说明 |
---|---|
boolean add(E e) | 将元素 e 放入集合中 |
void clear() | 删除集合中的所有元素 |
boolean isEmpty() | 判断集合是否没有任何元素,俗称空集合 |
boolean remove(Object e) | 如果元素e出现在集合中,删除其中一个 |
int size() | 返回集合中的元素个数 |
Object[] toArray() | 返回一个装有所有集合中元素的数组 |
3.3 Collection 示例
import java.util.Collection;
import java.util.ArrayList;
import java.util.Arrays;public class TestDemo {public static void main(String[] args) {//Collection<String> collection = new ArrayList<String>();//后面尖括号里也可以省略掉,写成这样的格式:Collection<String> collection = new ArrayList();//指定了当前这个集合里面只能放String类型,所以放1会报错//collection.add(1);Collection<String> list = new ArrayList<>();System.out.println(list.size());//0System.out.println(list.isEmpty());//truelist.add("我");list.add("爱");list.add("Java");System.out.println(list.size());//3System.out.println(list.isEmpty());//falseObject[] array = list.toArray();System.out.println(Arrays.toString(array));//[我, 爱, Java]for (String s : list) {System.out.println(s);//我 爱 Java}list.remove("爱");for (String s : list) {System.out.println(s);//我 Java}list.clear();System.out.println(list.size());//0System.out.println(list.isEmpty());//true}}
3.4 Map 常用方法说明
方法签名 | 说明 |
---|---|
V get(Object k) | 根据指定的k查找对应的v |
V getOrDefault(Object k, V defaultValue) | 根据指定的k查找对应的v,没有找到用默认值代替 |
V put(K key, V value) | 将指定的k-v放入Map |
boolean containsKey(Object key) | 判断是否包含k |
boolean containsValue(Object value) | 判断是否包含value |
set<Map.Entry<K,V>>entrySet() | 将所有键值对返回 |
boolean isEmpty() | 判断是否为空 |
int size() | 返回键值对的数量 |
3.5 Map 示例
import java.util.Map;
import java.util.HashMap;public class TestDemo {public static void main(String[] args) {Map<String, String> map = new HashMap<>();System.out.println(map.size());//0System.out.println(map.isEmpty());//trueSystem.out.println(map.get("作者"));//nullSystem.out.println(map.getOrDefault("作者", "佚名"));//佚名System.out.println(map.containsKey("作者"));//falseSystem.out.println(map.containsValue("佚名"));//falsemap.put("作者", "鲁迅");map.put("标题", "狂人日记");map.put("发表时间", "1918年");System.out.println(map.size());//3System.out.println(map.isEmpty());//falseSystem.out.println(map.get("作者"));//鲁迅System.out.println(map.getOrDefault("作者", "佚名"));//鲁迅System.out.println(map.containsKey("作者"));//trueSystem.out.println(map.containsValue("佚名"));//falsefor (Map.Entry<String, String> entry : map.entrySet()) {System.out.println(entry.getKey());//作者 发表时间 标题System.out.println(entry.getValue());//鲁迅 1918年 狂人日记}}}
4 实现 classes
除此之外,我们还会学习 java 中的栈 Stack。
5 Java数据结构知识体系
5.1 目标
- 学习集合框架的基本使用。
- 学习基本的数据结构知识。
- 学习七大基于比较的排序算法。
- 学习相关的 java 知识点。
5.2 知识点
集合框架的使用:
- Collection
- List
- ArrayList
- LinkedList
- Stack
- Queue
- PriorityQueue
- Deque
- Set
- HashSet
- TreeSet
- Map
- HashMap
- TreeMap
- Collections
数据结构的理论及实现:
- 顺序表
- 链表
- 栈
- 队列
- 二叉树
- 堆
排序算法:
- 插入排序
- 希尔排序
- 选择排序
- 堆排序
- 冒泡排序
- 快速排序
- 归并排序
Java 语法:
- 泛型 Generic
- 自动装箱 autobox 和自动拆箱 autounbox
- Object 的 equals 方法
比特科技 - Comparable 和 Comparator 接口
相关文章:

JavaSE 集合框架及背后的数据结构
目录 1 介绍2 学习的意义2.1 Java 集合框架的优点及作用2.2 笔试及面试题 3 接口 interfaces3.1 基本关系说明3.2 Collection 常用方法说明3.3 Collection 示例3.4 Map 常用方法说明3.5 Map 示例 4 实现 classes5 Java数据结构知识体系5.1 目标5.2 知识点 1 介绍 集合…...

-9501 MAL系统没有配置或者服务器不是企业版(dm8达梦数据库)
dm8达梦数据库 -9501 MAL系统没有配置或者服务器不是企业版) 环境介绍1 环境检查2 问题原因 环境介绍 搭建主备集群时,遇到报错-9501 MAL系统没有配置或者服务器不是企业版 1 环境检查 检查dmmal.ini配置文件权限正确 dmdba:dinstall,内容正…...

云备份——第三方库简单介绍并使用(上)
目录 一,Jsoncpp库序列化和反序列化 二,bundle文件压缩库 2.1 文件压缩 2.2 文件解压 一,Jsoncpp库序列化和反序列化 首先我们需要先了解一下json是什么,json是一种数据交换格式,采用完全独立于编程语言的文本格式来…...

MySQL数据库之索引
目录 一、索引的概念 二、索引的作用 三、索引的副作用 四、创建索引的规则 1、适合创建为索引的字段的规则 2、MySQL的优化 哪些字段/场景适合创建索引,哪些不适合 五、索引的分类和创建 1、索引的分类 2、三种创建方式 3、索引的创建演示 1、创建普通索…...

OpenCV(四):Mat支持的运算
目录 1.对两个 Mat 对象按元素进行运算,有加法、减法、乘法和除法等运算。 2.Mat类支持逻辑与、或、非等逻辑运算, 1.对两个 Mat 对象按元素进行运算,有加法、减法、乘法和除法等运算。 加法:Mat Mat,保存到 resul…...

WebRTC音视频通话-WebRTC推拉流过程中日志log输出
WebRTC音视频通话-WebRTC推拉流过程中日志log输出 之前实现iOS端调用ossrs服务实现推拉流流程。 推流:https://blog.csdn.net/gloryFlow/article/details/132262724 拉流:https://blog.csdn.net/gloryFlow/article/details/132417602 在推拉流过程中的…...

用Jmeter压测问题解决
最近做一个基于duboo服务的接口,需要进行稳定性测试。但是用Jmeter GUI 方式跑只能持续2个小时左右,Jmeter就崩溃了,日志报错:out of memory 解决方法如下: 直接运行jmeter的java包试试: 1、打开jmeter.…...

C语言:字符函数和字符串函数(一篇拿捏字符串函数!)
目录 求字符串长度: 1. strlen(字符串长度) 长度不受限制函数: 2. strcpy(字符串拷贝) 3. strcat(字符串追加) 4. strcmp(字符串比较) 长度受限制函数: 5. strncpy(字符串拷贝) 6. strncat(字符串追加) 7. strncmp(字符串比较) 字…...

问道管理:成交量买卖公式?
跟着股票商场的如火如荼,人们对于怎么解读和使用成交量进行股票生意的需求日积月累。成交量是指在某一特定时间内进行的股票生意的数量,它是投资者们研判商场状况和制定生意战略的重要指标之一。那么,是否存在一种最厉害的成交量生意公式呢&a…...

【MySQL】5、MySQL高阶语句
一、常用查询(增、删、改、查) 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 例如只取 10 条数据、对查询结果进行排序或分组等等 模板表: 数据库有一张info表,记录了学生…...

【Linux】redhat7.8配置yum在线源【redhat7.8镜像容器内配置yum在线源】通用
👨🎓博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...

强大的处理器和接口支持BL304ARM控制器
在智慧医疗领域,BL304可以用于实现医疗设备的智能化、远程监控和数据交换。在智慧电力领域,BL304可以帮助实现电网的智能化管理,提升电力供应的效率。在智慧安防领域,BL304可以实现智能监控、智能门锁等应用,保障安全。…...

react 基础知识(一)
1、 安装1 (版本 react 18) // 安装全局脚手架(create-react-app基于webpackes6) npm install -g create-react-app //使用脚手架搭建项目 create-react-app my-app // 打开目录 cd my-app // 运行项目 npm start2、初体验 impo…...

SpringBoot整合JUnit、MyBatis、SSM
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 SpringBoot整合 一、SpringBoot整合JUnit二、Spri…...

virtuoso61x中集成calibre
以virtuoso618为例,在搭建完电路、完成前仿工作之后绘制版图,版图绘制完成之后需要进行drc和lvs【仅对于学校内部通常的模拟后端流程而言】,一般采用mentor的calibre来完成drc和lvs。 服务器上安装有virtuoso和calibre,但是打开la…...

com.google.guava:guava 组件安全漏洞及健康分析
组件简介 维护者google组织许可证类型Apache-2.0首次发布2010 年 4 月 26 日最新发布时间2023 年 8 月 1 日GitHub Star48189GitHub Fork10716依赖包28,694依赖存储库219,576 Guava 是 Google 的一组核心 Java 库,其中包括新的集合类型(例如 multimap 和…...

Hadoop服务脚本
#!/bin/bash process("NameNode" "SecondaryNameNode" "DataNode" "NodeManager" "ResourceManager") JAVA_HOME"/opt/software/jdk1.8.0_371" HADOOP_HOME"/opt/software/hadoop-3.3.6"# 定义颜色的AN…...

[QT]设置程序仅打开一个,再打开就唤醒已打开程序的窗口
需求:speedcrunch 这个软件是开源的计算器软件。配合launch类软件使用时,忘记关闭就经常很多窗口,强迫症,从网上搜索对版本进行了修改。 #include "gui/mainwindow.h"#include <QCoreApplication> #include <…...

数据库(二) Oracle篇
Oracle SQL常用函数 概述 SQL函数有单行函数和多行函数,其区别为: 单行:输入一行,返回一行,如字符、数字、转换、通用函数等多行:输入多行,返回一行,也称为分组函数、组函数、聚合函数,且多行函数会自动滤空 单行函数 字符函数 CONCAT(…...

TDengine函数大全-目录
TDengine函数大全 详情见具体页面,点击进入。 1.数学函数 ABSACOSASINATANCEILCOSFLOORLOGPOWROUNDSINSQRTTAN 2.字符串函数 CHAR_LENGTHCONCATCONCAT_WSLENGTHLOWERLTRIMRTRIMSUBSTRUPPER 3.转换函数 CAST TO_ISO8601TO_UNIXTIMESTAMPTO_JSON 4.时间和日期…...

代理模式之静态代理
代理模式是一种常见的设计模式,它允许一个对象(代理对象)代表另一个对象(真实对象)进行操作。在软件开发中,代理模式被广泛应用于各种场景,例如网络请求的代理、权限控制的代理等。 静态代理是…...

LeetCode——栈的压入、弹出序列
这里我用下面的例子子来讲解一下模拟栈的实现。 例子1:pushed [1,2,3,4,5] popped [4,5,3,2,1] 思路:第一步:我们先创建一个栈,然后将pushed的数据压进去 第二步:判断! 当压入栈的数据和popped第一个数据…...

Flutter 逆向安全
前言: 前几天在 "学习" 一个项目, 发现是用 Flutter 开发的。之前研究过 flutter 的逆向,早期 Flutter 有工具可以通过快照进行反编译:《对照表如下》 新的版本开发者没有维护了。 目前没有很好的工具 可以对 Flutter 进…...

【微服务部署】01-Kubernetes部署流程
文章目录 部署1. Kubernetes是什么2. Kubernetes的优势3. 环境搭建4. 应用部署 部署 1. Kubernetes是什么 Kubernetes是一个用于自动部署、扩展和管理容器化应用程序的开源系统 2. Kubernetes的优势 自动化容器部署资源管理与容器调度服务注册发现与负载均衡内置配置与秘钥…...

SPI3+DMA外设驱动-TFTLCD初始化
前言 (1)本系列是基于STM32的项目笔记,内容涵盖了STM32各种外设的使用,由浅入深。 (2)小编使用的单片机是STM32F105RCT6,项目笔记基于小编的实际项目,但是博客中的内容适用于各种单片…...

通过chatgpt 学习React的useEffect
定义: useEffect 是 React 中的一个 Hook,它用于处理函数组件中的副作用操作。副作用操作可以包括数据获取、订阅事件、定时器等。 useEffect 接受两个参数:第一个参数是一个回调函数,用于执行副作用操作;第二个参数…...

rabbitMq介绍及使用
点击跳转https://blog.csdn.net/qq_43410878/article/details/123656765...

rabbitmq载在.net中批量消费的问题记录
背景 最近遇到了一个问题,在使用rabbitmq的时候出现了丢消息、消息重复消费等一系列的问题,使用的是.net框架,背景是高并发压力下的mq消费,按理说即使队列中堆了几百条消息,我客户端可以同处理5个消息。 原因是多线程…...

【RPC 协议】序列化与反序列化 | lua-cjson | lua-protobuf
文章目录 RPC 协议gRPCJSON-RPC 数据序列化与反序列化lua-cjsonlua-protobuf RPC 协议 在分布式计算,远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调…...

Flutter的Timer类
文章目录 一、Timer简介Timer类的详细介绍导入dart:async包创建一个定时器取消定时器定时器的周期性执行注意事项 二、Semantics简介Flutter Semantics 的详细介绍SemanticsNode语义标签和标签形状语义属性自定义语义行为通过语义树导航 一、Timer简介 Flutter的Timer类是Dart…...