当前位置: 首页 > news >正文

数据结构初始知识

集合框架

Java 集合框架(容器 ) Java Collection Framework ,定义在java.util 包下的⼀组接⼝ interfaces 和其实现类  classes

数据结构

数据结构:相互之间存在—种或多种特定关系的数据元素的集台

容器背后的数据结构

算法

算法:对特定问题求解步骤的一种描述,是为解决一个或一类问题给出的一个确定的、有限长的操作序列

算法效率

算法效率是衡量算法好坏的标准,算法效率=时间效率+空间效率

时间复杂度

时间复杂度(时间效率):衡量的是⼀个算法的运⾏速度,,算法中的基本操作的执⾏次数

⼤O的渐进表示法

1.⽤常数1取代运⾏时间中的所有加法常数,1-->加法常数

2.在修改后的运⾏次数函数中,只保留最⾼阶项

 3.如果最⾼阶项存在且不是1,则去除与这个项⽬相乘的常数,最高阶1

func1的基本操作次数:N^2+2*N+10,大O的渐近表示法得时间复杂度O(N^2)

递归的时间复杂度=递归的次数*每次递归的次数

空间复杂度

空间复杂度(空间效率):衡量⼀ 个算法所需要的额外空间,算法在运⾏过程中临时占⽤存储空间⼤⼩的量度

⼤O渐进表示法

常见的复杂度

O(1)  O(logN)"2为底"   O(N)     O(n*logN)     O(N^2)


包装类

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

装箱与拆箱

装箱

装箱:新建一个包装类型对象,将基本数据类型的值放入包装类对象的某个属性中

public class WrapperClass {public static void main(String[] args) {int num=11;Integer i=Integer.valueOf(num);System.out.println(num+" "+i);}
}
自动装箱
public class WrapperClass {public static void main(String[] args) {int num=22;Integer integer=num;Integer integer1=(Integer) num;System.out.println(integer1);}
}

拆箱

拆箱:将包装类对象的值取出,放到基本数据类型
public class WrapperClass {
public static void main(String[] args) {
int num=11;
Integer i=Integer.valueOf(num);
Integer i1=new Integer(i);
int num1=i1.intValue();
System.out.println(num1);

    }
}

自动拆箱
public class WrapperClass {public static void main(String[] args) {int num=22;Integer integer=num;Integer integer1=(Integer) num;int num1=integer;int n=(int)integer;System.out.println(n);}
}

自动拆箱与装箱的简写版
public class WrapperClass {
public static void main(String[] args) {
int a=100;
Integer b=a;
System.out.println("a="+a);
System.out.println("b="+b);
Double c=100.0;
double d=c;
System.out.println("c="+c);
System.out.println("d="+d);
}
}

装箱源码知:如果值在范围之内,数组中拿值,如果超过范围,new对象

public class WrapperClass {public static void main(String[] args) {Integer a = 127;Integer b = 127;Integer c = 128;Integer d = 128;System.out.println(a == b);System.out.println(c == d);}
}


泛型

class 泛型类名称 < 类型形参列表 >{

}

class Arr<T>{public Object[] arr=new Object[5];public void setValue(int pos,T val){arr[pos]=val;}public T getValue(int pos){return (T) arr[pos];}
}
public class GenericClass {public static void main(String[] args) {Arr<Integer> array=new Arr<Integer>();array.setValue(0,10);int ret=array.getValue(0);System.out.println(ret);}
}

类名后的<T> 代表占位符,表示当前类是⼀个泛型类

• E表⽰Element

• K表⽰Key

• V表⽰Value

• N表⽰Number

• T表⽰Type

• S,U,V等等-第⼆、第三、第四个类型

泛型类的使用

泛型类 < 类型实参 > 变量名 ; // 定义⼀个泛型类引⽤

new 泛型类 < 类型实参 >( 构造⽅法实参 );  // 实例化⼀个泛型类对象

泛型只能接受类,所有基本数据类型必须使用包装类

类型推导

推导出实例化需要的类型实参Integer

裸类型

泛型小结:

1.泛型将数据类型参数化进行传递

2.泛型编译时自动进行类型检查和转化

泛型编译

类型擦除:编译时,Java编译器将泛型类型信息从代码中擦除,擦处后,泛型类型替换为边界类型/指定类型

擦除前代码:

class Arr<T>{public Object[] arr=new Object[5];public void setValue(int pos,T val){arr[pos]=val;}public T getValue(int pos){return (T) arr[pos];}
}

擦除后代码:

class Arr{public Object[] arr=new Object[5];public void setValue(int pos,Object val){arr[pos]=val;}public Object getValue(int pos){return arr[pos];}
}
泛型的桥接方法

泛型的上界

class 泛型类名称 < 类型形参 extends 类型边界 > {

...

}

复杂事例

package demo;class maxArray<T extends Comparable<T>> {public T findMax(T[] array){T max=array[0];for (int i = 0; i <array.length ; i++) {if (array[i].compareTo(max)>0){max=array[i];}}return max;}
}
public class Border{public static void main(String[] args) {maxArray<Integer> array=new maxArray<>();Integer[] arr={1,2,5,6,8,3,9,4,7};Integer ret=array.findMax(arr);System.out.println(ret);}
}

没有指定类型边界E,可以视为EextendsObject

泛型方法

⽅法限定符 < 类型形参列表 > 返回值类型 ⽅法名称 ( 形参列表 ) {

...

}

class A{public<T extends Comparable<T>> T findMax(T[] array){T max=array[0];for (int i = 0; i <array.length ; i++) {if (array[i].compareTo(max)>0){max=array[i];}}return max;}
}
public class Border{public static void main(String[] args) {A a=new A();Integer[] array={1,2,3,4,5};a.<Integer>findMax(array);int r=a.findMax(array);System.out.println(r);}
}


通配符

class Message<T> {private T message;public T getMessage() {return message;}public void setMessage(T message) {this.message = message;}}public class wildCard {public static void fun(Message<?> temp) {System.out.println(temp.getMessage());}public static void main(String[] args) {Message<String> message = new Message<>();message.setMessage("Hello");fun(message);Message<Integer> message1=new Message<>();message1.setMessage(11);fun(message1);}}

通配符的上界(? extends T
通配符下界(? super T
  1. 泛型通配符包括无界通配符、上界通配符和下界通配符
  2. 泛型的类型参数,可接受的类型范围,称为可接受范围
  3. 通配符可捕获的类型范围,称为可捕获范围
  4. 无界通配符可捕获,可接受范围内的全部类型
  5. 上界通配符可捕获,可接受范围内某个类型及其子类型
  6. 下界通配符可捕获,可接受范围内某个类型及其超类型

http://www.dtcms.com/a/336120.html

相关文章:

  • 利用标准IO实现寻找文件中字符出现最多次数
  • 问津集 #5:Crystal: A Unified Cache Storage System for Analytical Databases
  • 6-服务安全检测和防御技术
  • gitee SSH配置
  • 探索分子世界:结构、性质、反应与前沿进展
  • 编程算法实例-求一个整数的所有因数
  • 力扣 hot100 Day76
  • WPFC#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
  • 代码随想录刷题——字符串篇(四)
  • 深度学习之优化器
  • 自然语言处理NLP---预训练模型与 BERT
  • Python界面设计【QT-creator基础编程 - 01】如何让不同分辨率图像自动匹配graphicsView的窗口大小
  • Git 入门指南:核心概念与常用命令全解析
  • 「数据获取」《中国文化文物与旅游统计年鉴》(1996-2024)(获取方式看绑定的资源)
  • 链式前向星、vector存图
  • Kafka_Broker_副本基本信息
  • 【FreeRTOS】信号量与互斥量
  • LeetCode热题100--104. 二叉树的最大深度--简单
  • 给纯小白的Python操作 PDF 笔记
  • 【牛客刷题】BM63 跳台阶:三种解法深度解析(递归/DP动态规划/记忆化搜索)
  • Baumer高防护相机如何通过YoloV8深度学习模型实现工作设备状态的检测识别(C#代码UI界面版)
  • Shell脚本-流程控制语句基本语法结构
  • Mutually aided uncertainty
  • 5G NR PDCCH之速率匹配
  • 【数据结构】堆和二叉树详解——上
  • 神经网络中的梯度概念
  • 【杂谈】-以质代量:谷歌主动学习范式重构AI训练逻辑
  • 把 AI 变成“气味翻译官”——基于微型电子鼻的低功耗 VOC 实时识别系统
  • 13、系统设计
  • 何为“低空经济”?