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数据库,前台后台,完美运行,有一万一千字论文。 系统中的功能模块主要是实现管理员和员工的管理; 管理员:个人中心、普通员工…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
