多态,匿名内部类(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

相关文章

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Java 继承和多态的作用及好处

《Java继承和多态的作用及好处》文章讲解Java继承与多态的概念、语法及应用,继承通过extends复用父类成员,减少冗余;多态实现方法重写与向上转型,提升灵活性与代码复用性,动态绑定降低圈复杂度... 目录1. 继承1.1 什么是继承1.2 继承的作用和好处1.3 继承的语法1.4 子类访问父类里面的成

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Java Lambda表达式的使用详解

《JavaLambda表达式的使用详解》:本文主要介绍JavaLambda表达式的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言二、Lambda表达式概述1. 什么是Lambda表达式?三、Lambda表达式的语法规则1. 无参数的Lambda表