 Java 应用与开发 - 类加载和反射大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 Java 应用与开发 类加载和反射 王晓东 wangxiaodong@ouc.edu.cn 中国海洋大学 December 24, 2018 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 学习目标 1. 理解什么是反射机制,通过常见场景认识反射的作用。 2. 掌握类的加载、连接和初始化概念。 理解类加载器及类加载机制。 4. 掌握使用反射生成并操作对象的方法。 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 接下来⋯ 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 反射机制 ▶ 程序运行时,允许改变程序结构或变量类型,这种语言称为 动态语言。从这个观点看,Perl、Python、Ruby 是动态语 言,C++、Java、C# 不是动态语言。 ▶ 但是 Java 有着一个非常突出的动态相关机制:反射 (Reflection),可以于运行时加载、探知、使用编译期间完 全未知的类。换句话说,Java0 码力 | 46 页 | 714.40 KB | 1 年前3 Java 应用与开发 - 类加载和反射大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 Java 应用与开发 类加载和反射 王晓东 wangxiaodong@ouc.edu.cn 中国海洋大学 December 24, 2018 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 学习目标 1. 理解什么是反射机制,通过常见场景认识反射的作用。 2. 掌握类的加载、连接和初始化概念。 理解类加载器及类加载机制。 4. 掌握使用反射生成并操作对象的方法。 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 接下来⋯ 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 反射机制 ▶ 程序运行时,允许改变程序结构或变量类型,这种语言称为 动态语言。从这个观点看,Perl、Python、Ruby 是动态语 言,C++、Java、C# 不是动态语言。 ▶ 但是 Java 有着一个非常突出的动态相关机制:反射 (Reflection),可以于运行时加载、探知、使用编译期间完 全未知的类。换句话说,Java0 码力 | 46 页 | 714.40 KB | 1 年前3
 跟我学Shiro - 张开涛gnian.iteye.com/ 40 [users]部分 配置用户名/密码及其角色,格式:“用户名=密码,角色 1,角色 2”,角色部分可省略。 如: 密码一般生成其摘要/加密存储,后续章节介绍。 [roles]部分 配置角色及权限之间的关系,格式:“角色=权限 1,权限 2”;如: 如果只有角色没有对应的权限,可以不配 roles,具体规则请参考授权章节。 Shiro——http://jinnianshilongnian.iteye.com/ 41 第五章 编码/加密 在涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码。比如之前 的 600w csdn 账号泄露对用户可能造成很大损失,因此应加密/生成不可逆的摘要方式存储。 编码/解码 Shiro 提供了 base64 和 16 进制字符串编码/解码的 API 支持,方便一些编码解码操作。Shiro CodecSupport,提供了 toBytes(str, "utf-8") / toString(bytes, "utf-8")用于在 byte 数组/String 之间转换。 散列算法 散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的 数据,常见的散列算法如 MD5、SHA 等。一般进行散列时最好提供一个 salt(盐),比如 加密密码“admin”,产生的散列值是“210 码力 | 219 页 | 4.16 MB | 10 月前3 跟我学Shiro - 张开涛gnian.iteye.com/ 40 [users]部分 配置用户名/密码及其角色,格式:“用户名=密码,角色 1,角色 2”,角色部分可省略。 如: 密码一般生成其摘要/加密存储,后续章节介绍。 [roles]部分 配置角色及权限之间的关系,格式:“角色=权限 1,权限 2”;如: 如果只有角色没有对应的权限,可以不配 roles,具体规则请参考授权章节。 Shiro——http://jinnianshilongnian.iteye.com/ 41 第五章 编码/加密 在涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码。比如之前 的 600w csdn 账号泄露对用户可能造成很大损失,因此应加密/生成不可逆的摘要方式存储。 编码/解码 Shiro 提供了 base64 和 16 进制字符串编码/解码的 API 支持,方便一些编码解码操作。Shiro CodecSupport,提供了 toBytes(str, "utf-8") / toString(bytes, "utf-8")用于在 byte 数组/String 之间转换。 散列算法 散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的 数据,常见的散列算法如 MD5、SHA 等。一般进行散列时最好提供一个 salt(盐),比如 加密密码“admin”,产生的散列值是“210 码力 | 219 页 | 4.16 MB | 10 月前3
 Java 应用与开发 - Java 数组和字符串13 } 1. 无论是 substring 还是 concat 操作等都不是在原有的字符串上进 行的,而是重新生成了一个新的字符串对象,最原始的字符串并 没有被改变。 2. String 对象一旦被创建就是固定不变的,对 String 对象的任何操 作都不影响到原对象,而是会生成新的对象。 大纲 数组的概念 一维数组 二维数组 字符串 字符串变量的创建 O 字符串变量的创建 CODE System.out.println(ss); 这段代码可能是怎么工作的? String 可能有一个 append() 方法,它会生成一个新的 String 对 象,该新对象包含了“Hello”与 s 连接后的字符串;然后再与 “I love you”连接,再次生成新的 String 对象。 这种工作方式会产生一大堆需要垃圾回收的中间对象! 大纲 数组的概念 一维数组 二维数组 字符串 + 与 System.out.println(ss); 这段代码可能是怎么工作的? String 可能有一个 append() 方法,它会生成一个新的 String 对 象,该新对象包含了“Hello”与 s 连接后的字符串;然后再与 “I love you”连接,再次生成新的 String 对象。 这种工作方式会产生一大堆需要垃圾回收的中间对象! 大纲 数组的概念 一维数组 二维数组 字符串 + 与0 码力 | 33 页 | 620.46 KB | 1 年前3 Java 应用与开发 - Java 数组和字符串13 } 1. 无论是 substring 还是 concat 操作等都不是在原有的字符串上进 行的,而是重新生成了一个新的字符串对象,最原始的字符串并 没有被改变。 2. String 对象一旦被创建就是固定不变的,对 String 对象的任何操 作都不影响到原对象,而是会生成新的对象。 大纲 数组的概念 一维数组 二维数组 字符串 字符串变量的创建 O 字符串变量的创建 CODE System.out.println(ss); 这段代码可能是怎么工作的? String 可能有一个 append() 方法,它会生成一个新的 String 对 象,该新对象包含了“Hello”与 s 连接后的字符串;然后再与 “I love you”连接,再次生成新的 String 对象。 这种工作方式会产生一大堆需要垃圾回收的中间对象! 大纲 数组的概念 一维数组 二维数组 字符串 + 与 System.out.println(ss); 这段代码可能是怎么工作的? String 可能有一个 append() 方法,它会生成一个新的 String 对 象,该新对象包含了“Hello”与 s 连接后的字符串;然后再与 “I love you”连接,再次生成新的 String 对象。 这种工作方式会产生一大堆需要垃圾回收的中间对象! 大纲 数组的概念 一维数组 二维数组 字符串 + 与0 码力 | 33 页 | 620.46 KB | 1 年前3
 《Java 应用与开发》课程讲义 - 王晓东类,但其中最多只能有一个类被定义为 Public 类; 3. 如果源文件中包含了 public 类,则源文件必须和该 public 类同名; 4. 一个源文件包含多个 Java 类时,编译后会生成多个字节码文件,即每个类都会 生成一个单独的“.class”文件,且文件名与类名相同。 1.6 课后习题 1. 安装配置 Eclipse Java 开发环境。 2. 使用一个文本编辑器(记事本等)编写一个简单的 String 类的成员属性可以看出 String 类其实是通过 char 数组来保存字符串的。 3. 无论是 substring 还是 concat 操作等都不是在原有的字符串上进行的,而是重新 生成了一个新的字符串对象,最原始的字符串并没有被改变。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 中国海洋大学信息学院计算机系 第 29 页 / 共 306 页 3.6. 课后习题 � 3 � 说明 String 对象一旦被创建就是固定不变的,对 String 对象的任何操作都不影响到原对 象,而是会生成新的对象。 3.6 课后习题 . O 小编程 1. 编写程序,求一个三阶方阵的对角线上各元素之和。 2. 编写程序,从键盘上输入一个字符串和子串开始位置与长度,截取该字符串的子 串并输出。0 码力 | 330 页 | 6.54 MB | 1 年前3 《Java 应用与开发》课程讲义 - 王晓东类,但其中最多只能有一个类被定义为 Public 类; 3. 如果源文件中包含了 public 类,则源文件必须和该 public 类同名; 4. 一个源文件包含多个 Java 类时,编译后会生成多个字节码文件,即每个类都会 生成一个单独的“.class”文件,且文件名与类名相同。 1.6 课后习题 1. 安装配置 Eclipse Java 开发环境。 2. 使用一个文本编辑器(记事本等)编写一个简单的 String 类的成员属性可以看出 String 类其实是通过 char 数组来保存字符串的。 3. 无论是 substring 还是 concat 操作等都不是在原有的字符串上进行的,而是重新 生成了一个新的字符串对象,最原始的字符串并没有被改变。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 中国海洋大学信息学院计算机系 第 29 页 / 共 306 页 3.6. 课后习题 � 3 � 说明 String 对象一旦被创建就是固定不变的,对 String 对象的任何操作都不影响到原对 象,而是会生成新的对象。 3.6 课后习题 . O 小编程 1. 编写程序,求一个三阶方阵的对角线上各元素之和。 2. 编写程序,从键盘上输入一个字符串和子串开始位置与长度,截取该字符串的子 串并输出。0 码力 | 330 页 | 6.54 MB | 1 年前3
 Java 应用与开发 - Java 技术概述及开发环境类,但其中最多只能有一 个类被定义为 Public 类; 3. 如果源文件中包含了 public 类,则源文件必须和该 public 类同名; 4. 一个源文件包含多个 Java 类时,编译后会生成多个字节码 文件,即每个类都会生成一个单独的“.class”文件,且文件 名与类名相同。 大纲 Java 技术概述 Java 平台核心机制 Java 开发环境 Java 基本开发流程 Java 应用程序结构需掌握的几条规则 类,但其中最多只能有一 个类被定义为 Public 类; 3. 如果源文件中包含了 public 类,则源文件必须和该 public 类同名; 4. 一个源文件包含多个 Java 类时,编译后会生成多个字节码 文件,即每个类都会生成一个单独的“.class”文件,且文件 名与类名相同。 大纲 Java 技术概述 Java 平台核心机制 Java 开发环境 Java 基本开发流程 Java 应用程序结构需掌握的几条规则 类,但其中最多只能有一 个类被定义为 Public 类; 3. 如果源文件中包含了 public 类,则源文件必须和该 public 类同名; 4. 一个源文件包含多个 Java 类时,编译后会生成多个字节码 文件,即每个类都会生成一个单独的“.class”文件,且文件 名与类名相同。 大纲 Java 技术概述 Java 平台核心机制 Java 开发环境 Java 基本开发流程 Java 应用程序结构需掌握的几条规则0 码力 | 33 页 | 1.17 MB | 1 年前3 Java 应用与开发 - Java 技术概述及开发环境类,但其中最多只能有一 个类被定义为 Public 类; 3. 如果源文件中包含了 public 类,则源文件必须和该 public 类同名; 4. 一个源文件包含多个 Java 类时,编译后会生成多个字节码 文件,即每个类都会生成一个单独的“.class”文件,且文件 名与类名相同。 大纲 Java 技术概述 Java 平台核心机制 Java 开发环境 Java 基本开发流程 Java 应用程序结构需掌握的几条规则 类,但其中最多只能有一 个类被定义为 Public 类; 3. 如果源文件中包含了 public 类,则源文件必须和该 public 类同名; 4. 一个源文件包含多个 Java 类时,编译后会生成多个字节码 文件,即每个类都会生成一个单独的“.class”文件,且文件 名与类名相同。 大纲 Java 技术概述 Java 平台核心机制 Java 开发环境 Java 基本开发流程 Java 应用程序结构需掌握的几条规则 类,但其中最多只能有一 个类被定义为 Public 类; 3. 如果源文件中包含了 public 类,则源文件必须和该 public 类同名; 4. 一个源文件包含多个 Java 类时,编译后会生成多个字节码 文件,即每个类都会生成一个单独的“.class”文件,且文件 名与类名相同。 大纲 Java 技术概述 Java 平台核心机制 Java 开发环境 Java 基本开发流程 Java 应用程序结构需掌握的几条规则0 码力 | 33 页 | 1.17 MB | 1 年前3
 Hello 算法 1.0.0b4 Java版展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 致谢 本书在开源社区众多贡献者的共同努力下不断成长。感谢每一位投入时间与精力的撰稿人,他们 是(按照 GitHub 自动生成的顺序):krahets, sjinzh, justin‑tse, Reanon, nuomi1, Gonglja, S‑N‑O‑ R‑L‑A‑X, danielsss, hpstory, RiverTwilight File: worst_best_time_complexity.java === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ int[] randomNumbers(int n) { Integer[] nums = new Integer[n]; // 生成数组 nums = { 1, 2, 3, ..., n } for (int i = 0; i } return -1; } 4.1.4. 数组典型应用 数组是最基础的数据结构,在各类数据结构和算法中都有广泛应用。 ‧ 随机访问:如果我们想要随机抽取一些样本,那么可以用数组存储,并生成一个随机序列,根据索引实 现样本的随机抽取。 ‧ 排序和搜索:数组是排序和搜索算法最常用的数据结构。例如,快速排序、归并排序、二分查找等都需 要在数组上进行。 ‧ 查找表:当我们需要快速查找0 码力 | 342 页 | 27.39 MB | 1 年前3 Hello 算法 1.0.0b4 Java版展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 致谢 本书在开源社区众多贡献者的共同努力下不断成长。感谢每一位投入时间与精力的撰稿人,他们 是(按照 GitHub 自动生成的顺序):krahets, sjinzh, justin‑tse, Reanon, nuomi1, Gonglja, S‑N‑O‑ R‑L‑A‑X, danielsss, hpstory, RiverTwilight File: worst_best_time_complexity.java === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ int[] randomNumbers(int n) { Integer[] nums = new Integer[n]; // 生成数组 nums = { 1, 2, 3, ..., n } for (int i = 0; i } return -1; } 4.1.4. 数组典型应用 数组是最基础的数据结构,在各类数据结构和算法中都有广泛应用。 ‧ 随机访问:如果我们想要随机抽取一些样本,那么可以用数组存储,并生成一个随机序列,根据索引实 现样本的随机抽取。 ‧ 排序和搜索:数组是排序和搜索算法最常用的数据结构。例如,快速排序、归并排序、二分查找等都需 要在数组上进行。 ‧ 查找表:当我们需要快速查找0 码力 | 342 页 | 27.39 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Java 版hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 GitHub 自动生成的顺序):krahets、coderonion、Gonglja、nuomi1、Reanon、justin‑tse、hpstory、 danielsss、curtishd、night‑cruise、 linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 www.hello‑algo.com 39 图 File: worst_best_time_complexity.java === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ int[] randomNumbers(int n) { Integer[] nums = new Integer[n]; // 生成数组 nums = { 1, 2, 3, ..., n } for (int i = 0; i0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Java 版hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 GitHub 自动生成的顺序):krahets、coderonion、Gonglja、nuomi1、Reanon、justin‑tse、hpstory、 danielsss、curtishd、night‑cruise、 linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 www.hello‑algo.com 39 图 File: worst_best_time_complexity.java === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ int[] randomNumbers(int n) { Integer[] nums = new Integer[n]; // 生成数组 nums = { 1, 2, 3, ..., n } for (int i = 0; i0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.1.0 Java版hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 GitHub 自动生成的顺序):krahets、Gonglja、nuomi1、codingonion、Reanon、justin‑tse、hpstory、 danielsss、curtishd、night‑cruise linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 File: worst_best_time_complexity.java === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ int[] randomNumbers(int n) { Integer[] nums = new Integer[n]; // 生成数组 nums = { 1, 2, 3, ..., n } for (int i = 0; i0 码力 | 378 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 Java版hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 GitHub 自动生成的顺序):krahets、Gonglja、nuomi1、codingonion、Reanon、justin‑tse、hpstory、 danielsss、curtishd、night‑cruise linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 File: worst_best_time_complexity.java === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ int[] randomNumbers(int n) { Integer[] nums = new Integer[n]; // 生成数组 nums = { 1, 2, 3, ..., n } for (int i = 0; i0 码力 | 378 页 | 18.47 MB | 1 年前3
 Hello 算法 1.0.0b5 Java版算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 致谢 本书在开源社区众多贡献者的共同努力下不断成长。感谢每一位投入时间与精力的撰稿人,他们是 (按照 GitHub 自动生成的顺序):krahets, justin‑tse, sjinzh, nuomi1, Reanon, Gonglja, S‑N‑O‑R‑ L‑A‑X, hpstory, danielsss, RiverTwilight linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 37 图 2‑13 File: worst_best_time_complexity.java === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ int[] randomNumbers(int n) { Integer[] nums = new Integer[n]; // 生成数组 nums = { 1, 2, 3, ..., n } for (int i = 0; i0 码力 | 376 页 | 30.69 MB | 1 年前3 Hello 算法 1.0.0b5 Java版算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 致谢 本书在开源社区众多贡献者的共同努力下不断成长。感谢每一位投入时间与精力的撰稿人,他们是 (按照 GitHub 自动生成的顺序):krahets, justin‑tse, sjinzh, nuomi1, Reanon, Gonglja, S‑N‑O‑R‑ L‑A‑X, hpstory, danielsss, RiverTwilight linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 37 图 2‑13 File: worst_best_time_complexity.java === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ int[] randomNumbers(int n) { Integer[] nums = new Integer[n]; // 生成数组 nums = { 1, 2, 3, ..., n } for (int i = 0; i0 码力 | 376 页 | 30.69 MB | 1 年前3
 Hello 算法 1.0.0 Java版hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 GitHub 自动生成的顺序):krahets、codingonion、nuomi1、Gonglja、Reanon、justin‑tse、danielsss、 hpstory、S‑N‑O‑R‑L‑A‑X、night‑c linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 File: worst_best_time_complexity.java === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ int[] randomNumbers(int n) { Integer[] nums = new Integer[n]; // 生成数组 nums = { 1, 2, 3, ..., n } for (int i = 0; i0 码力 | 376 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 Java版hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 GitHub 自动生成的顺序):krahets、codingonion、nuomi1、Gonglja、Reanon、justin‑tse、danielsss、 hpstory、S‑N‑O‑R‑L‑A‑X、night‑c linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 File: worst_best_time_complexity.java === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ int[] randomNumbers(int n) { Integer[] nums = new Integer[n]; // 生成数组 nums = { 1, 2, 3, ..., n } for (int i = 0; i0 码力 | 376 页 | 17.59 MB | 1 年前3
共 27 条
- 1
- 2
- 3













