多态,匿名内部类(lambda表达式),集合

2024-09-03 03:36

本文主要是介绍多态,匿名内部类(lambda表达式),集合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

多态(polymorphism)

一个演员扮演多个不同角色。可以减少if语句的使用。

概念在这里插入图片描述

具有接口或者继承关系

A extends B

A implement C

类型一致(IEat)

民间说法:父类的引用指向不同的子类对象(不同时刻)

在这里插入图片描述

产生不同结果

调用相同方法,产生不同结果。——方法重写(覆盖)

在这里插入图片描述

tips:ASAP–类似中文的“哈哈,呵呵”

匿名内部类

概念:没有类名,也不是单独文件

在这里插入图片描述
在这里插入图片描述
慎用 实际工作中用多了可能造成“屎山代码”

Fruit类

sort()给水果价格排序

在这里插入图片描述

Replace with lambda在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

大功告成

前后对比

在这里插入图片描述

lambda表达式

------>可以简化函数(方法)的写法

只有一个方法时

在这里插入图片描述
在这里插入图片描述

灰色表示可以简写/可省略

在这里插入图片描述

再写一个方法drink()在接口

此时就用匿名内部类了(接口不用写实现)

力扣:4. 寻找两个正序数组的中位数

在这里插入图片描述
在这里插入图片描述


简单法在这里插入图片描述

优化下在这里插入图片描述

击败100%在这里插入图片描述

高手刷题建议:不要加sout

在这里插入图片描述

集合法:不是很快

在这里插入图片描述

集合

两个中心:
在这里插入图片描述

框架

帮助类xxxS:Collections,Arrays。。。
在这里插入图片描述

有啥用

  • 对多个数据的操作数据结构。

数组缺点

  • 指定位置增加困难,删除困难。------ LinkList(链表)
  • 数组长度固定

和数组有关的集合

将数组包装为一个高级的数据结构 CRUD

List

<泛型>

  • 只能放对象,int不行得要包装类Integer

在这里插入图片描述
不写<>----没有限定在这里插入图片描述
加上方便取,why规定了类型

在这里插入图片描述

实现类

在这里插入图片描述

ArrayList古老的数组,但还是数组,

只不过你看不出来这个别人帮你包装好的数组

API

先写main

在这里插入图片描述

所有方法:

默认长度:10

在这里插入图片描述

grow扩容

本质:创建一个新数组,数组容量在原数组的基础上增加>>1(一半)

即:扩容1.5倍

在这里插入图片描述

何时扩容

10–>15

在这里插入图片描述

快满的时候扩容:size+1>10
在这里插入图片描述

数组过于频繁,效率降低

在这里插入图片描述

Api方法介绍

add()

数组尾部添加 ——list.add(e);

package com.ffyc.collection.ListDemo;import java.util.ArrayList;
import java.util.List;public class LinkDemo02 {public static void main(String[] args) {List<Integer> list1 = new ArrayList<>();list1.add(1);list1.add(2);List<Integer> list2 = new ArrayList<>();list2.add(3);list2.add(4);list1.addAll(list2);System.out.println(list1);}
}

在这里插入图片描述

addAll()

在这里插入图片描述
在这里插入图片描述

remove(index)
for(int i = 0;i<list1.length;i++){
list1.remove(i);
i--;
}
删除所有方法:迭代器——安全(遍历)
  //删除all数据:迭代器删法:安全Iterator<Integer> it = list1.iterator();while (it.hasNext()){//外面的来删,看有没有下一个if(it.next() != null){it.remove();}}

高阶:

在这里插入图片描述

11

在这里插入图片描述

get(index)

在这里插入图片描述

set(index,值)

在这里插入图片描述

Collections

.sort()
max
api
任务:随机放入10个数(1~20),要求数字不重复,使用迭代器list.forEach()

在这里插入图片描述

集合关系图

在这里插入图片描述

LinkedList

对比

在这里插入图片描述

数据结构与算法

在这里插入图片描述

在这里插入图片描述

线性

在这里插入图片描述

代表:数组,链表

非线性
编号操作动态数组ArrayList链表LinkedList
1添加
2删除
3查询
4修改
Vector向量——检测线程安全

底层数组 ArrayList(1.5),Vector(2*old)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sy:同步

List的三大实现类

在这里插入图片描述

Link集合存储自定义对象

Dog类

name ,brand, price ,weight

list

在这里插入图片描述

找对象,记得重写equals

在这里插入图片描述

index找到对象/字符存在的位置。

删除
  1. iteaa’r for循环 回减一个
  2. 在这里插入图片描述
排序

在这里插入图片描述

Camparator类,匿名内部类

在这里插入图片描述
在这里插入图片描述

Set——存储的数据是唯一的,不允许重复。

底层数据结构:Map

Api

在这里插入图片描述

一个子接口

如何遍历

在这里插入图片描述

27.344任务Set做法

package com.ffyc.collection.Set;import java.util.*;public class SetDemo {public static void main(String[] args) {Set<Integer> set = new HashSet<>();Random random = new Random(System.currentTimeMillis());Random random1 = new Random(new Date().getTime());while (set.size()<10){//生成10个随机数set.add(random1.nextInt(20)+1);}System.out.println(set);set.remove(6);//删对象System.out.println(set);//查询for (int tmp : set){System.out.println(tmp);}System.out.println("-------forEach-----");set.forEach(t-> System.out.println(t));System.out.println("-----iterator-------");Iterator<Integer> it = set.iterator();System.out.println(set);
//        set.stream().sorted();
//        System.out.println(set);}
}

在这里插入图片描述

去重原理

对象的equals,hashcode。要重写,add对象的时候是互斥的,后面相同的都进不去,只有第一个进去。

Set自动寻找hashcode和equals。

在这里插入图片描述

HashSet是无序的

在这里插入图片描述
在这里插入图片描述

变有序

在这里插入图片描述

隆重推出:LinkedLinkHashSet(和输入顺序一致)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于多态,匿名内部类(lambda表达式),集合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131912

相关文章

SpringBoot @Scheduled Cron表达式使用方式

《SpringBoot@ScheduledCron表达式使用方式》:本文主要介绍SpringBoot@ScheduledCron表达式使用方式,具有很好的参考价值,希望对大家有所帮助,如有... 目录Cron 表达式详解1. 表达式格式‌2. 特殊字符解析3. 常用示例‌4. 重点规则5. 动态与复杂场景‌

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

《SpringBoot集成Quartz使用Cron表达式实现定时任务》本文介绍了如何在SpringBoot项目中集成Quartz并使用Cron表达式进行任务调度,通过添加Quartz依赖、创... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Python中lambda排序的六种方法

《Python中lambda排序的六种方法》本文主要介绍了Python中使用lambda函数进行排序的六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1.对单个变量进行排序2. 对多个变量进行排序3. 降序排列4. 单独降序1.对单个变量进行排序