大数据学习记录---JAVA篇---后续知识

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 一些面向对象之后的知识的学习,包括下面知识:1、包装类 2、正则表达式 3、Array类 4、Lambda表达式 5、collection集合 --List系列和Set系列 6、 map集合--重点hashmap 7、泛型修饰 8、可变参数其实一种常见API的知识,也不太需要死记硬背,要学会查api文档去看里面具体每个方法是怎么用的,在后续使用中去学去熟悉。

包装类

1、之前说过的把基本数据类型包装成面向对象的形式就是包装类
2、下面是包装类的一些特性和功能
image.png

正则表达式

1、正则表达式就是字符串变量要matches的规则,可以用xx.matches(正则表达式)来得到我们的字符串变量是否满足某种规则,具体的规则定义如下。
image.png
这些个规则具体可以去看java官方的api文档
2、除了用matches匹配判断是否满足某种规则,正则表达式还可以有下面几种用法
image.png
正则表达式同时还经常搭配pattern和matcher类使用,具体看文档
肯定还有很多其他的用法,具体方法api去看官方文档,要学会看文档

Arrays类--也是一个常用工具类

1、就是一个用来操作数据的类,之前也见过,比如里面的toString能快速打印数组内容成字符串
2、除此以外还有sort,binarySearch等功能,用法就是Arrays.sort(数组a)
3、sort还可以用Comparator自定义排序的规则,具体用到的时候自己看文档

Lambda表达式

匿名内部类回顾

1、把匿名内部类写法更简化的一种写法!
2、回顾一下什么是匿名内部类,匿名内部类本来就是一种简化的写法,是对一些接口,或者抽象类进行实例化的时候,直接用{}把方法重写了。例如:Animal a = new Animal(){xxxx把方法重写了}。相当于创建了一个没有名字的子类,继承了抽象类或者实现了接口。
3、然后要注意这里实际上实例化的是我们的匿名内部类的对象,而不是Animal的对象!这和多态的思想是不同的,一开始想错了,并不相当于多态。匿名内部类new出来的是当前new的那个类型的子类型!!!

Lambda表达式介绍

1、使用条件:Lambda只能简化接口中,只有一个抽象方法,的匿名内部类形式。 首先必须是接口,其次只有一个抽象方法,可以在接口前加一个@Functionalinterface会自动帮检验。
2、例如下面的代码

interface Swimming{
    void swim()  // 只有一个抽象方法的接口,接口方法自动public abstract
}
/*--------主函数部分----------*/
Swimming s1 = new Swimming(){     //正常匿名内部类的写法
      public void swim(){
      xxxxx  // 重写抽象方法
      }
}
Swimming s1 = () -> {        // Lambda表达式的写法
      xxxxx  // 重写抽象方法  
}

3、Lambda表达式可以直接用在方法中,即当方法需要某种类或接口的参数的时候,可以直接在传参那里写一个Lambda表达式,注意以后要能读懂这种写法。
4、参数类型可以不写! 相当于在python里见到的那种,直接写一个参数 ->方法表达式的写法,就相当于直接返回表达式内容的值。
image.png

书上对Lambda表达式的另一种介绍--一定要看书!

1、上面是课中介绍的Lambda表达式是对匿名内部类的简化,这里书上提供了另一种角度来介绍,更像是我之前看到的python中Lambda表达式的介绍。
2、Java是面向对象的语言,我们想在传一个代码块做方法参数的时候,不能直接传,我们要先定义一个类,然后构造一个对象,对象的类中写好所需要的代码。而这时就有了Lambda表达式来做到支持类似函数式的写法。
3、在JAVA中有很多专门用来封装代码块的接口,这种接口只有一种方法,方法里就写了某种规则,然后在调用某些方法如Sort方法时,可以加一个comparator接口作为参数,来指定排序规则。而这类接口就叫函数式接口,而Lambda表达式正可以等同于这种接口,相当于直接在传参的时候,就不需要new一个匿名对象,再把对象里的抽象方法重写,而是直接把Lambda表达式作为参数传进去就行。
image.png
image.png
如上两种写法是一个意思,而Lambda表达式就更简便!
O1,O2在比较器中是用来指代传入的对象的!!

集合

Collection--单列

1、Collection是一种接口,下面还有具体的其他子接口继承它和实现类实现子接口,如下图。
image.png
2、用构造器初始化的时候可以用多态的写法,可以调用collection的一些通用api。但是!!多态写法不能用子类的独有功能!!

Collection<String> list = new ArrayList();

Collection集合的一些遍历方式

1、迭代器遍历
image.png
image.png
2、增强for循环遍历(也可以遍历数组)
image.png
3、结合Lambda表达式遍历的API
image.png
forEach方法结合Lambda表达式
原理上是forEach里面加上一个Consumer接口,但是其实这就是一个函数接口,只有一个抽象方法,所以可以直接用lamba表达式来写!!!
4、不支持以索引进行遍历,因为collection中包含着set系列是不含索引的

List系列集合

image.png
1、List系列集合的遍历方式,除了上面说的三种还有一种就是for循环用索引来遍历!
2、对于List集合来说,存在集合并发修改异常问题,就是说当你边遍历边删除list内部元素时,可能会出错,因为你在遍历时把对象删除,会导致list索引变化,那么在遍历时就会漏掉元素,会报错。对于迭代器遍历,可以用迭代器.remove来删除,不会出错。对于for循环,可以自减,保证不出错,或者for循环可以倒着删,也不会出错。剩下两个没办法。

ArrayList集合底层原理及特点

image.png
image.png
实现上还是基于数组,当size等于当前数组长度时,会自动进行扩容

LinkedList集合底层原理及特点

image.png
像栈和队列这些数据结构就可以用LinkedList实现,涉及首尾操作,效率高

Set系列集合

image.png

HashSet底层原理

这里重点理解一下思想,HashSet怎么实现的,用到了数组,链表,哈希表思想还有红黑树的内容。
image.png
image.png
image.png
image.png

HashSet去除重复底层原理和修正

1、去重的原理可以见上一部分HashSet的原理思想,先判断hashcode对应的地址,再用eqauls判断内容。
2、但是默认是两个new的对象不是重复的,即使他们内容相同,因为他们的hashcode不同,且地址也不同。所以必须在对应的类中重写overridding两个方法:hashCode()和equals()方法,才能使得内容相同的对象有一样的hashcode,且equals返回True。这个IDEA可以自动生成。
image.png

LinkedHashSet特点及原理

image.png

TreeSet特点及原理

image.png
image.png
1、在定义类的时候,就实现Comparable比较器接口,重写一个比较规则的方法。
2、用TreeSet自带的比较器对象来制定规则,就是在new的时候在括号里再new一个comparator,然后重写compare方法来指定规则。其实就是new一个匿名对象,然后重写方法。
3、其实comparator就是一个函数接口,上面这种方法其实更简化的写法就是直接在new的括号里加一个Lambda表达式来指定规则就行。
3、在写规则时,浮点型可以直接用Double.compare()

Collections集合工具类

1、这只是一个工具类,Collection是我们的单列集合接口,collections是定义的一个工具类,里面存了一些操作单列集合collection的方法,注意区分!具体使用查看文档!
2、工具类里面提供了许多静态方法,就直接用类名调用即可!这种写法其实很常见,比如前面也有一个是object是一个究极父类,同时objects是对应的一个工具类,里面提供了很多重写后的静态方法,供object子类使用,但是其实因为所有类都继承至object,所以大家都可以用objects里的api。

Map集合!!

image.png
image.png

Map集合的一些常用API

image.png

Map集合的遍历方式

1、键找值
用上面说的KeySet()找出所有键,再用get()通过键去找值。先获得所有key再去找value。
2、键值对
把key-value当成一个整体,先把Map集合转成Set集合,Set集合每个元素都是键值对。然后去遍历Set。
image.png
3、结合Lambda表达式的API
image.png
原理上是forEach里面加上一个BiConsumer接口,但是其实这就是一个函数接口,只有一个抽象方法,所以可以直接用lamba表达式来写!!!

HashMap实现类及其原理(很重要!!)

image.png
1、底层原理和之前讲到的hashset几乎一样,hashset就是基于hashmap实现的。
2、每个Node里包含Entry键值对,hashcode,和链表中后续对象的next
3、具体实现可以找找网上很多博客都有写,因为很重要!!后期可以自己看看源码!!

LinkedHashMap实现类

image.png

TreeMap实现类

image.png

不可变集合

image.png

泛型<>修饰

用泛型or修饰并不是固定某种类型,相反用泛型修饰其实是为了更具通用性!是可以传入任意类型的,在实际用的时候会把泛型变量的地方,全部替换成具体传进来的类型值!
1、泛型类,在定义类的同时,用泛型去修饰,把出现泛型变量的地方全部替换成传输的真实数据类型,比如ArrayList就是一个定义了泛型的实现类,里面对应的方法的参数,变量也都可以用泛型来修饰。
image.png
2、泛型方法,在定义方法的同时用泛型去修饰,把方法中出现泛型变量的地方全部替换成传输的真实数据类型。
3、泛型接口,让实现类在定义时就去传入某一具体的类型
image.png
4、泛型通配符(?)
在定义类的时候,虽然存在继承关系,但是在用泛型定义的对象上,却是没有关系的!
例如:BMW和BENZ类继承至Car,但是ArrayList和ArrayList和ArrayList一点关系也没有,BMW和BENZ类不能进到Car修饰的参数里。为解决这种问题,用泛型通配符?
image.png
image.png
一般在定义参数的时候,可以用通配符修饰

可变参数

1、类似于python中的那个kwarg和arg,JAVA中用...来表示,JAVA中可变参数本质上是一个数组
image.png

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
26天前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
258 1
|
1月前
|
数据采集 搜索推荐 Java
Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与用户体验优化中的应用(221)
本文探讨 Java 大数据在智能教育虚拟学习环境中的应用,涵盖多源数据采集、个性化推荐、实时互动优化等核心技术,结合实际案例分析其在提升学习体验与教学质量中的成效,并展望未来发展方向与技术挑战。
|
1月前
|
存储 搜索推荐 安全
Java 大视界 --Java 大数据在智能教育学习效果评估与教学质量改进中的应用(209)
本文探讨了 Java 大数据在智能教育中的创新应用,涵盖学习效果评估、教学质量改进及个性化教学方案定制等内容,结合实战案例与代码解析,展现技术如何赋能教育智能化转型。
|
1月前
|
存储 供应链 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在企业供应链风险预警与决策支持中的应用(204)
本篇文章探讨了基于 Java 的大数据可视化技术在企业供应链风险预警与决策支持中的深度应用。文章系统介绍了从数据采集、存储、处理到可视化呈现的完整技术方案,结合供应链风险预警与决策支持的实际案例,展示了 Java 大数据技术如何助力企业实现高效、智能的供应链管理。
|
1月前
|
存储 SQL Java
Java 大视界 -- Java 大数据在智能医疗手术风险评估与术前方案制定中的应用探索(203)
本文探讨了Java大数据技术在智能医疗手术风险评估与术前方案制定中的创新应用。通过多源数据整合、智能分析模型构建及知识图谱技术,提升手术风险预测准确性与术前方案制定效率,助力医疗决策智能化,推动精准医疗发展。
|
2月前
|
机器学习/深度学习 Java 大数据
Java 大视界 -- Java 大数据在智能政务公共资源交易数据分析与监管中的应用(202)
本篇文章深入探讨了 Java 大数据在智能政务公共资源交易监管中的创新应用。通过构建高效的数据采集、智能分析与可视化决策系统,Java 大数据技术成功破解了传统监管中的数据孤岛、效率低下和监管滞后等难题,为公共资源交易打造了“智慧卫士”,助力政务监管迈向智能化、精准化新时代。
|
2月前
|
数据采集 机器学习/深度学习 Java
Java 大视界 -- Java 大数据在智能体育赛事运动员体能监测与训练计划调整中的应用(200)
本篇文章聚焦 Java 大数据在智能体育赛事中对运动员体能监测与训练计划的智能化应用。通过构建实时数据采集与分析系统,结合机器学习模型,实现对运动员体能状态的精准评估与训练方案的动态优化,推动体育训练迈向科学化、个性化新高度。
|
2月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
2月前
|
存储 Java 大数据
Java 大视界 -- Java 大数据在智能家居能源消耗模式分析与节能策略制定中的应用(198)
简介:本文探讨Java大数据技术在智能家居能源消耗分析与节能策略中的应用。通过数据采集、存储与智能分析,构建能耗模型,挖掘用电模式,制定设备调度策略,实现节能目标。结合实际案例,展示Java大数据在智能家居节能中的关键作用。
|
SQL JSON 分布式计算
23篇大数据系列(一)java基础知识全集(下)(2万字干货,建议收藏)
23篇大数据系列(一)java基础知识全集(下)(2万字干货,建议收藏)
23篇大数据系列(一)java基础知识全集(下)(2万字干货,建议收藏)

热门文章

最新文章