数据结构初识

 目录 

1.初识

2.时间复杂度

常见时间复杂度举例:

3.空间复杂度

4.包装类&简单认识泛型

4.1装箱和拆箱

 5.泛型

6.泛型的上界

7.泛型方法

8.List接口

1.初识

1.多画图

2.多思考

3.多写代码

4.多做题

牛客网-题库/在线编程/剑指offer  算法篇:面试必刷TOP101(学哪个刷哪个)

5.看书籍:《大话数据结构》  查漏补缺

数据结构 是一门逻辑非常严谨的学科 学习的时候,学习的时候要多调试  因为代码量非常多!!!

前置知识:

1.泛型

2.包装类

Java当中集合类背后就是数据结构,集合类有很多,所以把这些集合类有些书上会叫作:集合框架

集合框架 里面有很多的集合类,每个集合类背后又是一个数据结构

学习的角度:

1.背后的数据结构

2.对应的集合类

3.集合框架

学习目标:

1.认识Java当中的集合类

2.学习复杂度

本质:数据结构的种类有很多!

为什么会有这么多数据结构?-》描述或者组织数据的方式不同   

每一个集合类描述和组织数据的方式是不一样的

概念:什么是数据结构?

数据结构=》数据+结构--》描述或者组织一些数据

2.时间复杂度

衡量算法效率~~~

算法中基本操作的执行次数,为算法的时间复杂度 

e.g.  3N^2+2N+10

三条规定:
1.用常数1取代运行时间中的所有加法常数     3N^2+2N+1

2.再修改后的运行次数函数中,只保留最高阶项  3N^2

3.如果最高阶项存在且不是1,则去除与这个项相乘的常数   所以 O(N^2)

常见时间复杂度举例:

// 计算bubbleSort的时间复杂度?(冒泡排序)
//相邻元素两两交换void bubbleSort(int[] array) {for (int end = array.length; end > 0; end--) {boolean sorted = true;for (int i = 1; i < end; i++) {if (array[i - 1] > array[i]) {Swap(array, i - 1, i);sorted = false;}}if (sorted == true) {break;}}
}

最好: (n -1)+(n -2)+...+1+0 = 1/2*n^2        O(N^2)

最坏:O(N)

//二分查找
int binarySearch(int[] array, int value) {int begin = 0;int end = array.length - 1;while (begin <= end) {int mid = begin + ((end-begin) / 2);if (array[mid] < value)begin = mid + 1;else if (array[mid] > value)end = mid - 1;elsereturn mid;}return -1;
}

时间复杂度的计算 不能光看代码 还要结合思想

// 计算阶乘递归factorial的时间复杂度?
long factorial(int N) {return N < 2 ? N : factorial(N-1) * N;
}

 递归的复杂度 = 递归的次数*每次递归执行的次数

时间复杂度为O(N) 

// 计算斐波那契递归fibonacci的时间复杂度?
int fibonacci(int N) {return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}

时间复杂度为O(2^n)

常见的复杂度:结合代码的思想来看

O(1)  O(logN)    O(N)   O(N*logN)   O(N*2)

3.空间复杂度

临时占用存储空间大小的量度

冒泡排序    O(1)           

斐波那契    O(N)

递归    O(N)

4.包装类&简单认识泛型

除了 Integer 和 Character, 其余基本类型的包装类都是首字母大写

4.1装箱和拆箱

public class Main{public static void main(String[] args) {Integer a = new Integer(10);int b = a;//自动拆箱System.out.println(b);//显示拆箱 拆箱为自己指定的元素int c = a.intValue();System.out.println(c);double d = a.doubleValue();System.out.println(d);}public static void main1(String[] args) {//装箱:把一个基本数据类型转化为包装类型的过程//自动装箱 & 显示装箱int a = 10;Integer b = a;//自动装箱System.out.println(b);Integer c = Integer.valueOf(a);//显示装箱System.out.println(c);}
}

面试题: 为什么一个True,一个False呢?

 原因:

装箱的源代码:

 5.泛型

泛型: 就是适用于许多许多类型 。从代码上讲,就是对类型实现了参数化。
泛型的主要目的:就是指定当前的容器,要吃有什么类型的对象。让编译器去做检查
/*
实现一个类,类中包含一个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值*/
import java.util.Arrays;//<T>:代表当前类是一个泛型类
//<T extends Number> T是Number或者Number的子类
class MyArray<T>{public Object[] array = new Object[10];//public T[] array = new T[10];不允许实例化一个泛型数组//public T[] array = (T[])new Object[10]; 这样写也不好!!!public void set(int pos,T val){array[pos] = val;}public T get(int pos){return (T)array[pos];//强转成T类型的元素}public Object[] getArray(){return array;}}
public class Main{public static void main(String[] args) {MyArray<String> myArray = new MyArray<>();//指定String类型的数据myArray.set(0,"hello");//myArray.set(1,90);这里不能放整型了String str = myArray.get(0);System.out.println(str);Object[] ret = myArray.getArray();System.out.println(Arrays.toString(ret));//相当于将类型作为参数传给TMyArray<Integer> myArray2 = new MyArray<>();myArray2.set(0,1);Integer a = myArray2.get(0);System.out.println(a);}
}

底层原理:

6.泛型的上界

在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束
语法
class 泛型类名称 < 类型形参 extends 类型边界 > {
}

小试牛刀:(复杂实例)

/*
写一个泛型类  实现一个方法,这个方法是求指定类型数组的最大值的T extends Comparable<T>   T一定是实现Comparable接口的
* */class Alg<T extends Comparable<T>> {public T findMax(T[] array) {T max = array[0];for (int i = 1; i < array.length; i++) {if(array[i].compareTo(max) >0){max = array[i];}}return max;}
}
class A implements Comparable<A>{@Overridepublic int compareTo(A o) {return 0;}
}
public class Main{public static void main(String[] args) {Alg<String> alg = new Alg<>();Alg<Integer> alg2 = new Alg<>();Alg<Integer> alg3 = new Alg<>();Integer[] array = {1,13,51,71,19};Integer ret = alg2.findMax(array);System.out.println(ret);}
}

extends在泛型中:上界  (拓展)

7.泛型方法

接下来我们实现一个泛型方法

class Alg2 {//泛型方法public<T extends Comparable<T>> T findMax(T[] array) {T max = array[0];for (int i = 1; i < array.length; i++) {if(array[i].compareTo(max) >0){max = array[i];}}return max;}
}
public class Main{public static void main(String[] args) {Alg2 alg2 = new Alg2();Integer[] array = {1,13,51,71,19};Integer ret = alg2.findMax(array);System.out.println(ret);}
}

 变成静态的话,不用实例化对象

8.List接口

import java.util.*;public class Main{ArrayList<String> arrayList = new ArrayList<>();List<String> list = new ArrayList<>();//推荐写法List<String> list1 = new Stack<>();List<String> list2 = new Vector<>();List<String> list3 = new LinkedList<>();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/20583.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

CUDA HOME does not exist, unable to compile CUDA op(s),已解决

有一个服务器上没有/usr/loacl/cuda&#xff0c;我也没有权限在这个目录装cuda&#xff0c;使用pip装完torch&#xff0c;llama factory使用时出现&#xff1a; 应该是本地没有nvcc相关执行文件。 先使用了&#xff1a; conda install -c cudatoolkit-dev不管用&#xff0c; …

杰发科技AC7801——ADC定时器触发的简单使用

使用场景 在需要多次采样结果的情况下&#xff0c;比如1s需要10w次的采样结果&#xff0c;可以考虑使用定时器触发采样&#xff0c;定时器设置多少的时间就会多久采样转换一次。 再加上使用dma&#xff0c;采样的结果直接放在dma的数组里面。 实现了自动采样&#xff0c;自动…

【有啥问啥】基于文本的图像检索(Text-Based Image Retrieval, TBIR)技术详解

基于文本的图像检索&#xff08;Text-Based Image Retrieval, TBIR&#xff09;技术详解 1. 背景理论知识 1.1 什么是基于文本的图像检索&#xff08;TBIR&#xff09;&#xff1f; 基于文本的图像检索&#xff08;Text-Based Image Retrieval&#xff0c;简称TBIR&#xff…

探索PyMuPDF:Python中的强大PDF处理库

文章目录 **探索PyMuPDF&#xff1a;Python中的强大PDF处理库**第一部分&#xff1a;背景第二部分&#xff1a;PyMuPDF是什么&#xff1f;第三部分&#xff1a;如何安装这个库&#xff1f;第四部分&#xff1a;至少5个简单的库函数使用方法第五部分&#xff1a;结合至少3个场景…

HarmonyOS Next 关于页面渲染的性能优化方案

HarmonyOS Next 关于页面渲染的性能优化方案 HarmonyOS Next 应用开发中&#xff0c;用户的使用体验至关重要。其中用户启动APP到呈现页面主要包含三个步骤&#xff1a; 框架初始化页面加载布局渲染 从页面加载到布局渲染中&#xff0c;主要包含了6个环节&#xff1a; 执行页…

已解决centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64的解决方案

出现cannot find a valid baseurl for repo:base/7/x86_64错误通常是由于YUM仓库源无法找到或无法访问&#xff0c;导致YUM无法正常工作。这种情况常见于CentOS 7系统。解决这个问题需要检查几个方面&#xff0c;如网络连接、DNS设置和YUM仓库源配置。 &#x1f9d1; 博主简介&…

架构图解析:如何构建高效的微服务系统

在当今的数字化浪潮中&#xff0c;构建高效、灵活且可扩展的系统已成为企业的重要目标。微服务架构作为一种先进的软件设计模式&#xff0c;通过将复杂的应用程序分解为一系列小型、独立的服务&#xff0c;显著提升了系统的灵活性、可扩展性和维护性。本文将通过解析微服务系统…

Label-studio-ml-backend 和YOLOV8 YOLO11自动化标注,目标检测,实例分割,图像分类,关键点估计,视频跟踪

这里写目录标题 1.目标检测 Detection2.实例分割 segment3.图像分类 classify4.关键点估计 Keypoint detection5.视频帧检测 video detect6.视频帧分类 video classify7.旋转目标检测 obb detect8.替换yolo11模型 给我点个赞吧&#xff0c;谢谢了附录coco80类名称 笔记本 华为m…

恒利联创携手Pearson VUE 亮相第62届高博会

2024年11月15日-17日&#xff0c;第62届中国高等教育博览会&#xff08;简称“高博会”&#xff09;在重庆举行&#xff0c;恒利联创携手全球领先的考试服务提供商Pearson Vue Certiport共同亮相&#xff0c;为中国院校展现并提供数字化职业技能的教育平台及学练考体系。 作为P…

linux复习2:简单命令简述

cp 复制单个文件 cp file.txt /path/to/destination/ 将 file.txt 复制到指定的目标目录。 复制多个文件 cp file1.txt file2.txt /path/to/destination/ 将 file1.txt 和 file2.txt 复制到指定的目标目录。 复制目录&#xff08;递归复制&#xff09; cp -r /path/to/source…

【逆向篇】抓取微信小程序源码 (附加逆向工具wxappUnpacker和使用方法)

抓取微信小程序源码附加逆向工具wxappUnpacker 文章目录前言一、工具准备1 解密工具2 逆向工具 二、解密小程序1.确认小程序包位置2.打开一个小程序3.解密小程序包 三、逆向小程序1、检查nodejs2、安装依赖3、正式逆向 该文章只是学习作用&#xff0c;如果侵权请联系删除&…

【C++】拷贝构造

一种特殊的构造函数&#xff0c;用自身这种类型来构造自身 Student stu1; Student stu2stu1;//调用拷贝构造如果类中没有自定义拷贝构造&#xff0c;类中会自动提供一个默认拷贝构造如果类中定义了自定义拷贝构造&#xff0c;类中不会提供默认拷贝构造 自定义拷贝构造 类名(…

C++的IO流

目录 1. C语言的输入与输出 2. 流是什么 3. CIO流 3.1 C标准IO流 3.2 C文件IO流 4 stringstream的简单介绍 1. 将数值类型数据格式化为字符串 2. 字符串拼接 3. 序列化和反序列化结构数据 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。…

青训营刷题笔记11

水一个简单题&#xff1a; 问题描述 小C定义了一个“完美偶数”。一个正整数 xx 被认为是完美偶数需要满足以下两个条件&#xff1a; xx 是偶数&#xff1b;xx 的值在区间 [l,r][l,r] 之间。 现在&#xff0c;小C有一个长度为 nn 的数组 aa&#xff0c;她想知道在这个数组中…

游戏+AI的发展历程,AI技术在游戏行业的应用有哪些?

人工智能&#xff08;AI&#xff09;与游戏的结合&#xff0c;不仅是技术进步的体现&#xff0c;更是人类智慧的延伸。从最初的简单规则到如今的复杂决策系统&#xff0c;AI在游戏领域的发展历史可谓波澜壮阔。 早在2001年&#xff0c;就有研究指出游戏人工智能领域&#xff0…

Vue.js 插槽 Slots 实际应用 最近重构项目的时候遇到的...

前端开发中 插槽 Slots 是一个重要的概念 我们可以查看一下vue.js的官方文档 https://cn.vuejs.org/guide/components/slots 类似于连接通道一样 可以把核心代码逻辑搬到另外的地方 做一个引用 而原先的地方可能并不能这样书写 对于这个概念我在vue的官方文档里面找到了…

Windows11在WSL中安装QEMU-KVM

Windows11在WSL中安装QEMU-KVM 检查系统信息WSL检测安装所需软件端口转发 检查系统信息 打开设置-系统-系统信息&#xff08;拉到最下面&#xff09;&#xff0c;我的是 版本 Windows 11 专业版 版本号 24H2 安装日期 ‎2024/‎11/‎13 操作系统版本 26100.2314 体验 Windows …

【东莞石碣】戴尔R740服务器维修raid硬盘问题

1&#xff1a;石碣某塑料工厂下午报修一台戴尔R740服务器硬盘故障&#xff0c;催的还比较着急。 2&#xff1a;工程师经过跟用户确认故障的问题以及故障服务器型号和故障硬盘型号&#xff0c;产品和配件确认好后&#xff0c;公司仓库确认有该款硬盘现货&#xff0c;DELL 12T S…

SpringBoot学习笔记(一)

一、Spring Boot概述 &#xff08;一&#xff09;微服务概述 1、微服务 微服务&#xff08;英语&#xff1a;Microservices&#xff09;是一种软件架构风格&#xff0c;它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础&#xff0c;利用模块化的方式…

SD模型微调之LoRA

​ &#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&a…