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 集合框架的优点及作用

  1. 使用成熟的集合框架,有助于我们便捷、快速的写出高效、稳定的代码。
  2. 学习背后的数据结构知识,有助于我们理解各个集合的优缺点及使用场景。

2.2 笔试及面试题

腾讯-Java后台开发面经:

  1. HashMap 了解不,介绍一下,如果一个对象为 key 时,hashCode 和 equals 方法的用法要注意什么?
  2. HashSet 和 HashMap 的区别是什么?
  3. HashMap 是线程安全的么?那需要线程安全需要用到什么?

阿里巴巴-Java后台开发面经:

  1. ArrayList 和 LinkedList 的区别是什么?
  2. 有了解过 HashMap 的具体实现么?
  3. HashMap 和 ConcurrentHashMap 哪个效率更高?

今日头条-Java后台开发面经:

  1. 编程题:判断一个链表是否是一个回文链表。
  2. Redis 的 zset 类型对应到 java 语言中大致是什么类型?
  3. hashCode 主要是用来做什么用的?

3 接口 interfaces

3.1 基本关系说明

在这里插入图片描述
Collection: 用来存储管理一组对象 objects,这些对象一般被称为元素elements。

  1. Set : 元素不能重复,背后隐含着查找/搜索的语义。
  2. SortedSet : 一组有序的不能重复的元素。
  3. List : 线性结构。
  4. Queue : 队列。
  5. Deque : 双端队列。

Map: 键值对 Key-Value-Pair ,背后隐含着查找/搜索的语义。

  1. 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 目标

  1. 学习集合框架的基本使用。
  2. 学习基本的数据结构知识。
  3. 学习七大基于比较的排序算法。
  4. 学习相关的 java 知识点。

5.2 知识点

集合框架的使用:

  1. Collection
  2. List
  3. ArrayList
  4. LinkedList
  5. Stack
  6. Queue
  7. PriorityQueue
  8. Deque
  9. Set
  10. HashSet
  11. TreeSet
  12. Map
  13. HashMap
  14. TreeMap
  15. Collections

数据结构的理论及实现:

  1. 顺序表
  2. 链表
  3. 队列
  4. 二叉树

排序算法:

  1. 插入排序
  2. 希尔排序
  3. 选择排序
  4. 堆排序
  5. 冒泡排序
  6. 快速排序
  7. 归并排序

Java 语法:

  1. 泛型 Generic
  2. 自动装箱 autobox 和自动拆箱 autounbox
  3. Object 的 equals 方法
    比特科技
  4. Comparable 和 Comparator 接口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620060.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

贝佐斯前妻签署捐赠誓言:承诺捐出半数财产 目前价值接近180亿美元

【TechWeb】5月28日消息&#xff0c;据国外媒体报道&#xff0c;在今年1月份宣布同贝佐斯离婚、并在4月份完成程序、公布财产分配方案后&#xff0c;麦肯齐贝佐斯也成为全球最富有的女性之一&#xff0c;资产超过了300亿美元。 而在处理完离婚程序之后还不到两个月&#xff0c;…

走着走着,就剩下了沉默

从前&#xff0c;车马很慢&#xff0c;一生只够爱一人。如今&#xff0c;万物很快&#xff0c;一生却难得一人心。 这段话看起来很伤感&#xff0c;却有几分真实。 如今的社会&#xff0c;能够深情共白首的伴侣少之又少&#xff0c;更多的是感情变质&#xff0c;互相辜负。 想…

“是不是不能找程序员做男朋友?” 来听听程序员们怎么回答!

Time will tell. 今日在吃瓜又看到了一条有意思的话题: 尽管35岁之后失业的程序员确实不少,但是这样说是不是太真实、冷血了一些… 毕竟,我以为,两个人是既然会在一起,那应该就是想要一起过一辈子的!而大部分人在一起也都是因为相互喜欢吧! 所以咱们都这么现实的吗?这…

Cesium 显示经纬高

文章目录 需求分析 需求 页面展示经、纬度和高 分析 html <div id"latlng_show" style"width:340px;height:30px;position:absolute;bottom:40px;right:200px;z-index:1;font-size:15px;"><div style"width:100px;height:30px;float:left;…

性能测试面试问题,一周拿3个offer不嫌多

性能测试的三个核心原理是什么&#xff1f; 1.基于协议。性能测试的对象是网络分布式架构的软件&#xff0c;而网络分布式架构的核心是网络协议 2.多线程。人的大脑是单线程的&#xff0c;电脑的cpu是多线程的。性能测试就是利用多线程的技术模拟多用户去负载 3.模拟真实场景。…

检测链表中是否存在环

题目、解析和代码 题目&#xff1a;给定一个单链表&#xff0c;判断其中是否有环的存在 解析&#xff1a;这里使用两个遍历速度不一样的结点进行判断&#xff0c;一个慢结点从首结点开始遍历&#xff0c;这个结点每次只遍历一个结点&#xff1b;一个快结点从第二个结点进行遍历…

连接器信号完整性仿真教程 七

本将介绍微带线及差分微带线仿真。做连接器信号完整性仿真时&#xff0c;有时后没法将激励端口直接设置到连接器端子上&#xff0c;这就需画出连接器PCB PAD&#xff0c;将激励端口设置在PAD的端面上&#xff0c;或者用引线连接PAD&#xff0c;将引线引出到适当的位置&#xff…

登录校验-Filter-登录校验过滤器

目录 思路 登录校验Filter-流程 步骤 流程图 登录校验Filter-代码 过滤器类 工具类 测试登录 登录接口功能请求 其他接口功能请求 前后端联调 思路 前端访问登录接口&#xff0c;登陆成功后&#xff0c;服务端会生成一个JWT令牌&#xff0c;并返回给前端&#xff0…

谷歌相册明年取消无限空间储存政策

简单介绍 据可靠消息称谷歌相册将从明年夏季也就是 2021年6月1日 开始取消无限存储容量政策。从明年夏季开始继续上传照片和视频将占用谷歌分配给用户的15 GB免费空间。 原文转载自浅行浅醉博客 原文阅读&#xff1a;点击阅读

黑客盯上了Google相册漏洞

2019独角兽企业重金招聘Python工程师标准>>> 研究人员在Google相册应用上发现了一个已修复的漏洞。有了这个漏洞&#xff0c;黑客可以使用Google相册来跟踪他们的位置历史记录。 来自互联网安全公司Imperva的Ron Masas在博客文章中解释说&#xff0c;Google相册最近…

笔记本电脑与台式机同步连接_如何将台式机与Google云端硬盘(和Google相册)同步...

笔记本电脑与台式机同步连接 Google has been doing its part to make sure everyone has a backup of important data, and it recently released a new tool for Windows and Mac users to take that redundancy to the next level. Appropriately named Backup and Sync, it…

vue查看本地相册_使用Vue.js构建的Google相册相册查看器

vue查看本地相册 google-photos-vue (google-photos-vue) Google Photos album viewer built with Vue.js. 使用Vue.js构建的Google相册相册查看器。 特征 (Features) 格式 (Formats) 照片 (Photo) Conventional grid. 常规网格。 文本 (Text) Justified layout highlighting…

复古拼贴_如何在Android上使用Google相册创建拼贴,动画或电影

复古拼贴 Google Photos is a huge improvement over Android’s old “Gallery” app, but it does a lot more than just keep your stuff organized and synced. You can easily manipulate your photos into some very cool, shareable collages, animations, and even mov…

多亏了Google相册,如何一键释放Android手机上的空间

Let’s be real here: modern smartphones have limited storage. While they’re coming with a lot more than they used to, it’s easy to fill 32GB without even realizing it. And with today’s high-end cameras, well, pictures and videos can quickly consume a bi…

如何在Android的相机应用程序中添加Google相册快捷方式

Google Photos is arguably the best photo management app on the Play Store. It’s intuitive and easy to use, has lots of useful features, and best of all, it backs up all of your images. The thing is, if you’re using a non-stock Android phone—like an LG G…

谷歌相册也不能无限白嫖了,「地主家」也烧不起免费网盘

木易 发自 凹非寺 量子位 报道 | 公众号 QbitAI 连Google都撑不住了。 Google相册宣布&#xff1a;从2021年6月1日开始&#xff0c;将停止提供免费的无限制存储空间。 这意思&#xff0c;是不让「白嫖」了&#xff1f; 不不不&#xff0c;只是不能无限白嫖了。 Google相册还是会…

android仿漫画源码、抽奖转盘、Google相册、动画源码等

Android精选源码 android实现仿今日头条的开源项目 波浪效果&#xff0c;实现流量的动态显示 美妆领域的app, 集成了摄像头取色, 朋友圈, 滤镜等 android仿漫画源码 android一个视差动画的引导页效果 Android 仿美团app头部左右切换效果 android银行卡操作步骤 Android自定义Vi…

谷歌云端硬盘 转存_如何合并多个Google云端硬盘和Google相册帐户

谷歌云端硬盘 转存 It isn’t possible to merge Google accounts directly, making it tricky to move your data from A to B. If you want to merge data across multiple Google Drive and Google Photos accounts, here’s how you do it. 无法直接合并Google帐户&#xf…

如何防止某些照片显示在Android的图库或Google相册中

Look, we get it: you don’t want every picture showing up in your gallery app on your Android phone. The thing is, there’s not an easy way to just let Gallery or Google Photos know you want to keep certain photos (or even folders) private. But there is a …