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数据库,前台后台,完美运行,有一万一千字论文。 系统中的功能模块主要是实现管理员和员工的管理; 管理员:个人中心、普通员工…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...
JS面试常见问题——数据类型篇
这几周在进行系统的复习,这一篇来说一下自己复习的JS数据结构的常见面试题中比较重要的一部分 文章目录 一、JavaScript有哪些数据类型二、数据类型检测的方法1. typeof2. instanceof3. constructor4. Object.prototype.toString.call()5. type null会被判断为Obje…...
JVM——对象模型:JVM对象的内部机制和存在方式是怎样的?
引入 在Java的编程宇宙中,“Everything is object”是最核心的哲学纲领。当我们写下new Book()这样简单的代码时,JVM正在幕后构建一个复杂而精妙的“数据实体”——对象。这个看似普通的对象,实则是JVM内存管理、类型系统和多态机制的基石。…...
