day32 泛型 数据结构 List
一、泛型
概述
JDK1.5同时推出了两个和集合相关的特性:增强for循环,泛型
泛型可以修饰泛型类中的属性,方法返回值,方法参数, 构造函数的参数
Java提供的泛型类/接口
-
Collection, List, Set,Iterator 等
自定义的泛型
public class Student <H,W>{}
自定义的泛型方法
public static <T> void showList(List<T> list){
//list.forEach(s-> System.out.println(s));
for (T t : list) {
System.out.println(t);
}
}
泛型的通配符
T: type(表示Java类型 类型)
E: Element(主要在List中使用 元素)
K: key(主要在Map集合中使用,表示键)
V: value(主要在Map集合中使用,表示值)
?: 表示不确定类型的Java类型
泛型的边界
泛型的上界
语法:? extends 类型
位置:类上,方法参数
泛型的下界
语法:? super 类型
位置: 方法参数
/*** 泛型的上界和下界** ? 是泛型的通配符,不知道用什么类型的时候用?* 泛型上界语法: ? extends 类* 泛型下界语法: ? super 类**/ public class GenericityTest {public static void main(String[] args) {List<Integer> list1 = new ArrayList<>();List<String> list2 = new ArrayList<>();List<Number> list3 = new ArrayList<>();List<Object> list4 = new ArrayList<>();ShowCollection sc = new ShowCollection();sc.showList1(list1);//sc.showList1(list2); 编译不通过,因为String不是Number的子类sc.showList1(list3);// sc.showList1(list4); 编译不通过,Object不是 Number的子类// sc.showList2(list1); //编译不通过,因为Integer不是Number的父类// sc.showList2(list2); //编译不通过,因为String不是Number的父类sc.showList2(list3); //最小不能低于Number.此处是Numbersc.showList2(list4); //编译通过,Object是Number的父类} }class ShowCollection{//泛型的上界public void showList1(List<? extends Number>list){}//泛型的下界public void showList2(List<? super Number> list){} }
二、数据结构
1. 数据结构概述
- 数据结构式计算机底层存储、组织数据的方式,是值数据与数据之间以什么样的方式排列在一起
- 选择合适和数据结构可以带来更搞笑的运行或者存储效率
2. 常见的数据结构
- 栈
- 队列
- 链表
- 数组
- ...
3. 栈数据结构的执行特点
- 后进先出,先进后出
- 入栈/压栈: 数据进入栈的过程
- 出栈/弹栈:数据离开栈的过程
4. 队列
- 先进先出,后进后出
- 入队列:数据从队列后端进入队列的过程
- 出队列:数据从队列前端离开对列的过程
5. 数组
- 数组是一种查询快,增删慢的数据结构
- 数组在内存中是一块连续的存储空间
6. 链表
- 链表中的元素在内存中是不连续存储的(游离),每个元素节点都包含数据值和下一个元素的地址
- 链表查询慢,增删快,首尾操作极快
三、List
java.util.List接口,通常称为:线性表* List继承自Collection,特点是可以存放重复的元素并且有序** 常用的实现类* java.util.ArrayList:内部用数组实现,查询性能好* java.util.LinkedList:内部使用链表实现,增删性能好,首尾增删性能最好* 在对集合操作性能没有特殊要求的条件下通常使用ArrayList*/ public class ListDemo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("one");list.add("two");list.add("three");list.add("four");list.add("five");/*** E get(int index) 返回列表中指定位置的元素。*///获取集合中下标是3个元素System.out.println(list.get(3));//用for循环遍历集合for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}/*** E set(int index, E element)* 用指定元素替换列表中指定位置的元素(可选操作)。* 返回值是被替换掉的元素。*/String str = list.set(1, "二");System.out.println(str);System.out.println(list);//反转集合for(int i=0;i<list.size()/2;i++){//获取i上的元素String e = list.get(i);String s = list.set(list.size()-1-i,e);list.set(i,s);}System.out.println(list);System.out.println("==============================");/*** Collections类中提供了静态方法static void reverse(List<?> list)反转指定列表中元素的顺序。*/Collections.reverse(list);System.out.println(list);} }
三点五、作业练习
/*** 泛型:* 泛型只是在编译期有效,在编译之后程序会采取去繁星花的措施。将泛型相关的信息擦除**/ public class CollectionDemo3 {public static void main(String[] args) {List<String> strs = new ArrayList<>();List<Integer> ints = new ArrayList<>();Class aClass = strs.getClass();Class bClass = ints.getClass();System.out.println(aClass);System.out.println(bClass);// if(strs.equals(ints)){ // System.out.println("类型一致"); // }else{ // System.out.println("类型不一致"); // }} }
/*** 自定义泛型方法测试*/ public class ShowListTest {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);//ShowList.showInt(list);ShowList.showList(list);List<String> strs = new ArrayList<>();strs.add("一");strs.add("二");strs.add("三");strs.add("四");strs.add("五");ShowList.showList(strs);List<Teacher> teas = new ArrayList<>();teas.add(new Teacher("张老师",1500));teas.add(new Teacher("李老师",2500));teas.add(new Teacher("孙老师",9500));teas.add(new Teacher("赵老师",3500));ShowList.showList(teas);}public static <T> void showList(List<T> list){//list.forEach(s-> System.out.println(s));for (T t : list) {System.out.println(t);}} }
相关文章:
day32 泛型 数据结构 List
一、泛型 概述 JDK1.5同时推出了两个和集合相关的特性:增强for循环,泛型 泛型可以修饰泛型类中的属性,方法返回值,方法参数, 构造函数的参数 Java提供的泛型类/接口 Collection, List, Set,Iterator 等 …...
DW-AHB Central DMAC
文章目录 AHB Central DMAC —— Design Ware AHB Central DMAC —— Design Ware AHB(Adavenced High-performace BUS) Central DMAC(Direct Memory Access Controller) : 一个高性能总线系统。 作用:在嵌入式系统种连接高速设备,如处理器内存&#x…...
JavaScript设计模式(四)——策略模式、代理模式、观察者模式
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
JS画布的基本使用
直线 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style> #myname{ border: 1px solid red; /* background: linear-gradient(to righ…...
c++ set/multiset
set/multiset 集合,一个单个,一个多个(multi)。两个库都是"set"。 https://blog.csdn.net/fckbb/article/details/130917681 对象创建 set(const Pred& compPred(),const A& alA()):创建空集合。set(const set& x):…...
多线程与高并发——并发编程(4)
文章目录 四、阻塞队列1 基础概念1.1 生产者消费者概念1.2 JUC阻塞队列的存取方法2 ArrayBlockingQueue2.1 ArrayBlockingQueue的基本使用2.2 生产者方法实现原理2.2.1 ArrayBlockingQueue的常见属性2.2.2 add方法2.2.3 offer方法2.2.4 offer(time,unit)方法2.2.5 put方法2.3 消…...
设计模式之建造者模式
文章目录 盖房项目需求传统方式解决盖房需求传统方式的问题分析建造者模式概述是建造者模式的四个角色建造者模式原理类图建造者模式的注意事项和细节 盖房项目需求 需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼…...
源码编译安装opencv4.6.0,别的版本也行
1.下载opencv4.6.0 系统: ubuntu 1804 64位点我下载opencv 4.6.0 https://codeload.github.com/opencv/opencv/zip/refs/tags/4.6.0 指令下载 推荐: wget -O opencv.zip https://github.com/opencv/opencv/archive/4.6.0.zip wget -O opencv_contrib.zip https://github.com/…...
【MongoDB】Springboot中MongoDB简单使用
1. docker安装MongoDB 拉取镜像 docker pull mongo创建容器 docker run -di --name mongo-service --restartalways -p 27017:27017 -v ~/data/mongodata:/data mongo2. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactI…...
Python 面试:单元测试unit testing 使用pytest
1. 对于函数进行单元测试 calc.py def add(x, y):"""Add Function"""return x ydef subtract(x, y):"""Subtract Function"""return x - ydef multiply(x, y):"""Multiply Function""…...
螺旋矩阵、旋转矩阵、矩阵Z字打印
螺旋矩阵 #include <iostream> #include <vector> void display(std::vector<std::vector<int>>&nums){for(int i 0; i < nums.size(); i){for(int j 0; j < nums[0].size(); j){std::cout<<nums[i][j]<< ;}std::cout<<…...
Seaborn绘制热力图的子图
Seaborn绘制热力图的子图 提示:如何绘制三张子图 绘制的时候,会出现如下问题 (1)如何绘制1*3的子图 (2)三个显示条,如何只显示最后一个 提示:下面就展示详细步骤 Seaborn绘制热力…...
C++二级题目4
小白鼠再排队 不会 多余的数 #include<iostream> #include<string.h> #include<stdio.h> #include<iomanip> #include<cmath> #include<bits/stdc.h> int a[2000][2000]; int b[2000]; char c[2000]; long long n; using namespace std; i…...
Tomcat 部署时 war 和 war exploded区别
在 Tomcat 调试部署的时候,我们通常会看到有下面 2 个选项。 是选择war还是war exploded 这里首先看一下他们两个的区别: war 模式:将WEB工程以包的形式上传到服务器 ;war exploded 模式:将WEB工程以当前文件夹的位置…...
Delphi IdTcpServer IdTcpClient 传输简单文本
Delphi IdTcpServer IdTcpClient 传输简单文本 已经很久敲代码了,想找一段直接Delphi11 TCP简单文本传输,费劲!FStringStream 、FStrStream : FStringStream:TStringStream.Create(,TEncoding.UTF8); 已经很久敲代码了,…...
界面控件Telerik UI for WPF——Windows 11主题精简模式提升应用体验
Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序。Telerik UI for WPF支持MVVM、触摸等,创建的应用程序可靠且结构良好,非常容易维护,其直观的API将无缝地集成Visua…...
PoseC3D 基于人体姿态的动作识别新范式
摘要1. Introduction2. Related Work动作识别 3D-CNN基于骨架的动作识别 GCN基于骨骼的动作识别 2D-CNN3. Framework3.1. Good Practice for Pose Extraction3.2. From 2D Poses to 3D Heatmap Volumes3.3 基于骨骼的动作识别 3D-CNNPose-SlowOnlyRGBPose-SlowFast4. Experimen…...
html2canvas 截图空白 或出现toDataURL‘ on ‘HTMLCanvasElement或img标签没截下来 的所有解决办法
1.如果截图空白: 1.1以下的参数是必须要有的。 width: shareContent.offsetWidth, //设置canvas尺寸与所截图尺寸相同,防止白边height: shareContent.offsetHeight, //防止白边logging: true,useCORS: true,x:0,y:0,2,如果出现了报错 toData…...
Eclipse错误提示: Symbol ‘xxxx‘ could not be resolved
问题现象: 调试FPGA时,如果在qsys中增加新的内容,到nios中编译的时候就会提示找不到宏定义。 而这些宏定义都是在system.h这个头文件中的,原来的宏定义都能找到,就是新增的找不到,这个应该和头文件路径没有…...
基于Java的OA办公管理系统,Spring Boot框架,vue技术,mysql数据库,前台+后台,完美运行,有一万一千字论文。
基于Java的OA办公管理系统,Spring Boot框架,vue技术,mysql数据库,前台后台,完美运行,有一万一千字论文。 系统中的功能模块主要是实现管理员和员工的管理; 管理员:个人中心、普通员工…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
