赞
踩
相信很多初入编程的小伙伴对于语言有种选择恐惧症,对于Java也不知怎么去学,这期文章J哥会给大家整理最适合小白学习的JavaEE教程。
- # 大数据与云计算的学习
- 概念:海量数据,具有高增长率、数据类型多样性、一定时间内无法使用常规软件进行捕捉、管理和处理的数据集合。
- 特征:4V特征(是大家普遍认可的)
- 大量
- 多样
- 高速
- 价值
- # 大数据能做什么?
- 在海量的各种各样类型的价值密度低的数据中,我们要进行的是: 数据采集、数据存储、数据清洗、数据分析、数据可视化。这个过程就是大数据要做的主要事情。
- # 使用语言
- JAVA8稳定(最新14)
- Write Once Run Anywhere (一次编译处处运行)
- JDK 开发环境
- JRE 运行环境
- JVM 虚拟机
- // 基本数据类型
- 整型
- - 字节型:byte
- - 短整型:short
- - 整型:int
- - 长整型:long
- 浮点型
- - 单精度浮点型:float
- - 双精度浮点型:double
- 字符型:char
- 布尔型:boolean
- // 引用数据类型
- // 标识符,是由若干个字符组成的有序数列。在标识符中应该遵守的规则:
- 1.由字母数字下划线和$组成
- 2.不能以数字开头
- 3.不能与系统关键字或者保留字重名
- // 命名规范(驼峰命名法)
- 1.望文之意
- 2.驼峰命名法(大驼峰命名法、小驼峰命名法)
- - 首字母大写
- - 除首单词除外
- - 没有特殊说明默认用小驼峰命名法
# 计算机内存中的一块存储空间,是存储数据的基本单元 值可以改变称之为变量 (年龄、体重) 值不可以改变称之为常量(一个人的出生日期) IDEA中操作了
- // 强制类型转换
- // 自动类型转换
- // 特殊说明:
- 1.byte short char 类型的数据在进行运算的时候会自动的转换为int类型
- 2.浮点型转整型 会舍弃小数点后面的所有内容 只保留整数部分
- // 算数 + - * / % ++ --
- ++自增运算符
- 位于变量后表示先取值再进行加1的操作
- 位于变量前表示先进行加1后取值的操作
- --自减运算符
- 与++一致
- ++ 与 —— 的优先级最高
- // 赋值运算符 =
- 可以和其他运算符组合成 组合运算符
- 组合运算符 隐性的包含了类型转换
- // 关系运算符 > >= = < <= == !=
- // 1.关系运算符的结果一定是布尔类型的
- // 2.等值比较需要注意,使用的是双等号
- // 逻辑运算符 & | ! ^ && || 对两个布尔值进行的运算
- java python go javascript c
- & and && && && 与 :逻辑与,两真即为真,任意一个为假,结果即为假 false
- | or || || || 或 :逻辑或,两假即为假,任意一个为真,结果即为真 true
- ! not ! ! ! 非 :逻辑非,非真即假,非假即真。
- ^ 异或 :逻辑异或,相同为假,不同为真。
- && 短路与,如果前面的结果可以决定整体的运算结果,后面的表达式不参与运算
- || 短路或,如果前面的结果可以决定整体的运算结果,后面的表达式不参与运算
- javascript中逻辑运算符取决于右侧,右边为什么返回的值就为什么
- // 位运算符
- 只能位于两个整型的运算
- & 位与运算,对补码的每一位进行与运算
- | 位或运算,对补码的每一位进行或运算
- ^ 位异或运算,对补码的每一位进行异或运算
- ~ 按位取反运算 包括符号位
- << 按左移运算
- >> 按右移运算 最高位补符号位
- >>> 无符号位右移运算 左侧补0 就是最高位补的不是符号位 而是0
- 符号 64 32 16 8421
- 0 (0 0 0) (0000) --> 源码直接这样写
- 补码:举例:
- -45 = 32 + 8 + 4 + 1
- 1010 1101 源码
- 1101 0010 + 1 = 1101 0011 补码 向右移动两位 溢出的就不要了 1111 0100 11 --> 11舍
- 移动后的补码 : 1111 0100
- 再反转位源码 : 1000 1011 + 1 = 1000 1100
- 最终结果为 -12
- 在右移运算的时候,每像右移动一位,相当于除了一个2,但是这里遵循向下取整 11.25 = 12
- 面试题:
- 如何高效率的计算 2*8
- 2*8 是 2+了八次
- 8*2 是 8+8
- 2<<3 这个效率最高
-
- // 三目运算符
- 表达式 :布尔结果表达式/布尔变量?值1 : 值2
- 如果问好前面的布尔值是true,整体的结果为值1。否则整体的结果为值2。
- // 运算符的优先级
- 整体看:一元运算符(只能操作一个数据:+ - ++ -- ! ~)>二元运算符(可以操作两个数据:+ - * /)>三元运算符(三目运算符 ? :)
- 赋值运算符的优先级最低
- 算数运算符中: 乘除模 > 加减
- 逻辑运算符中: 与 > 或、异或
- 小括号的优先级最高
- // 流程控制分类
- 顺序结构/分支结构/循环结构 --java
- 顺序结构/分支结构/循环结构 --C
- 顺序结构: 代码从上往下,逐行依次执行。是程序执行的默认结构
- 分支结构: 程序在某一个节点遇到了多种可能向下执行的可能性,根据条件,选择一个分支继续执行
- 循环结构: 某一段代码需要被重复执行多次。
- // 分支流程控制-if/switch
- // 第一种 if else
- if (condition) { // condition 判断条件(布尔 boolean)
- // 代码段1
- }
- else{
- // 代码段2
- }
- // 第二种 if - else if
- if(){
-
- }else if(){
-
- }...
- else{
-
- }
- // switch
- switch(变量){
- case 值1{
- // 分支语句1
- }
- case 值2{
- // 分支语句2
- }...
- default:
- }
- // 实例
- int season = 1;
- switch (season) {
- case 1:
- System.out.println("春天");
- break;
- case 2:
- System.out.println("夏天");
- break;
- case 3:
- System.out.println("秋天");
- break;
- case 4:
- System.out.println("冬天");
- break;
- default:
- System.out.println("错误的季节");
- }
- switch具有穿透性:指的是,当switch的变量和某一个case值匹配上之后,将会跳过后续的case或者default的匹配,直接向后穿透。
- 为了杜绝穿透,可以使用关键字break;
- // 循环流程控制-for/while
- for(循环的起点、循环的条件、循环的步长){
- // 这里的代码,将在循环条件成立的时候重复执行
- // 这里 又叫 循环体
- }
- 循环起点: 只会执行一次 通常用于定义一个用来控制循环的变量
- 循环条件: 布尔结果的表达式,当成立的时候,循环体执行
- 循环步长: 记录每次循环发生的变化,通常用于改变控制循环的变量的值
- // while
- while (循环条件){
- // 循环体
- }
-
- // do-while
- do {
- // 循环体
- } while (循环条件);
- 如果从一开始的条件都是不成立的,那么do-while比while循环多执行一次逻辑
-
- // 两个关键字
- break 无论循环条件是否成立,立即结束循环
- continue 立即停止本次循环,立即进入下次循环
-
- 如果循环的次数是可预期的 推荐使用for循环
- 如果循环的次数是不可预期的,但是有明确的结束条件,推荐使用while循环
-
- // 循环标签
- OUTER: // 通过内部循环结束外部循环
- for (int i = 1; i <= 5; i++) {
- for (int j = 1; j <= 5; j++) {
- if (j == 3) {
- break OUTER;
- }
- System.out.println("i = "+ i + ", j = " + j);
- }
- }
- // 输出0-100所有奇数和
- int sum = 0;
- for (int number = 1; number <= 100; number++) {
- if (number % 2 != 0) {
- // System.out.println(number);
- sum += number;
- }
- }
- System.out.println(sum);
- // 打印九九乘法表
- int line = 1;
- for (; line <= 9; line++) {
- for (int column = 1; column <= line; column++) {
- System.out.print(column + "x" + line + "=" +column*line + " "); // java的print没有换行 println自带一个换行符
- } // python 中print有换行 需要 print(公式,end="")
- System.out.println();
- }
- // 百钱白鸡
- // 已知 每只母鸡5元钱,每只公鸡三元钱,三只小鸡一元钱
- // 有100元去买鸡,要求正好花完100元,且购买100只鸡
- // 输出所有的购买方案
- for (int m = 0; m <= 100 / 5; m++) {
- for (int g = 0; g < 100 / 3; g++) {
- for (int x = 0; x <= 100; x += 3) {
- // 小鸡的数量是三的倍数
- if (m * 5 + g * 3 + x / 3 == 100 && m + g + x == 100) {
- System.out.println("可以买:母鸡" + m + "公鸡" + g + "小鸡" + x);
- }
- }
- }
- }
- // 方法的概念
- 我们将需要被多次执行的逻辑包装起来,在需要的时候直接调用即可。
- 方法就是为了事项这个需求而存在的(使其可以重复调用、降低代码的冗余、提高代码的复用性与维护性)
- // 方法的定义与调用
- [访问权限修饰符][其他的修饰符]返回值类型 方法名称([参数列表]){
- 方法体
- }
- public class FirstMethod {
- public static void main(String[] args) {
- // 访问权限修饰符:访问权限修饰符
- // 其他修饰符: static
- // 返回值类型: void
- // 方法的名字: 小驼峰命名
- // 小括号里面写参数列表
- print(); // 调用方法
- }
-
- public static void print() { // 如果需要这个方法中的逻辑被执行,则需要进行方法的调用
- // 方法体
- System.out.println("This is my first method");
- }
- }
- ·方法是定义在类的内部的,与main函数并列(方法中不允许套用方法)
- 访问权限修饰符
- // 方法的参数
- 调用方法时,传入的数据被称为 参数(定义在小括号中)
- 形参: 定义方法时定义的参数
- 实参: 需要传的值
- 传参: 实参给形参赋值-->传参
- // 方法的返回值
- 函数调用时,一些情况下无需返回结果;另一些情况下则必须有返回值
- return 关键字:表示方法执行的结果;方法的结束。
-
- public class ReturnType {
- public static void main(String[] args) {
- System.out.println("和为:" + add(1, 2));
- }
-
- public static int add(int num1, int num2) { // int 返回值类型
- return num1 + num2;
- }
- }
- // 方法的重载
- 在一个类的方法中,如果多个方法满足如下条件,则他们之间的关系就是重载
- ·方法名相同
- ·参数不同
- ~参数不同,体现在参数的数量不同或者参数的类型不同 (方法的入口不同)
- 注意: 方法的重载与返回值没有关系!
- public class Overload {
- public static void main(String[] args) {
- add();
- add(2);
- add(3, 4);
- add("aa");
- }
-
- public static void add() {
- System.out.println("无参数");
- }
-
- public static void add(int num1) {
- System.out.println("add(int)");
- }
-
- public static void add(int num1, int num2) {
- System.out.println("add(int int)");
- }
-
- public static void add(String s) {
- System.out.println("add(String)");
- }
- }
-
- // 方法的递归
- 递归,是一种程序设计的思想。在解决问题的时候,可以将问题拆分成若干个小问题。通过解决这些小问题,逐渐解决这个大问题。
-
- package com.laity.basicSyntax.method;
-
- /**
- * @author : Laity
- * @Project: JavaLaity
- * @Package com.laity.basicSyntax.method
- * @date Date : 2021年11月12日 23:36
- * @Description: 方法的递归
- */
- public class Method2 {
- public static void main(String[] args) {
- // multiply(9);
- System.out.println(multiply(10));
- System.out.println(sum(100));
- }
-
- /**
- * /** 按ctrl + 回车
- * 计算一个数字的阶乘
- *
- * @param num 需要计算阶乘的数字
- * @return 计算的结果
- */
- public static int multiply(int num) {
- // 设置出口条件
- if (num == 1) {
- return 1;
- }
- // 递进与回归(自己调用自己)
- return num * multiply(num - 1);
- }
-
- public static int sum(int n) {
- if (n == 1) {
- return 1;
- }
- return n + sum(n - 1);
- }
- }
- // 概念:一组连续的存储空间,存储多个相同数据类型的值(是一个数据容器)
- 特点:类型相同、长度固定。
- // 数组的声明 (注释:以后只要看到 关键字new 都是在堆上开辟空间)
- int [] array = new int[5]; // int[5] 表示array这个数组存储的容量为5
- 数组中的数据默认值为:
- 整型:0
- 浮点型:0.0
- 字符型:'\u0000'
- 布尔型:false
- 引用数据类型:null
-
- public class Array1 {
- public static void main(String[] args) {
- // 前言:使用[]表示一个数组,中括号前写数组中可以存储的数据类型
- // 1.声明一个数组
- // 2.数组的实例化:在为数组分配内存空间,并且分配数组中初始的值
- // new: 为数组开辟空间,需要使用关键字new
- // 实例化的同时,指定这个数组的长度
- // 数组中的数据默认值为:
- int[] array = new int[5]; // int[5] 表示存储的容量为5
- // 实例化数组的同时,指定这个数组中存储的数据
- // 此时这个数组中,默认存储了5个数据,也就是说数组的长度为5
- int[] array2 = new int[]{1, 2, 3, 4, 5};
- // 省略new int[]
- int[] array3 = {1, 2, 3, 4, 5};
- }
- }
- // 访问数组中的元素
- public class Array2 {
- public static void main(String[] args) {
- // 1.实例化一个数组
- int[] array = {1, 2, 3, 4, 5};
- // 2.用里面的元素时,两种操作:读和写
- int a = array[2];
- System.out.println(a);
- // 3..修改数组中的元素
- array[3] = 100;
- System.out.println(array[3]);
- }
- }
- // 数组的遍历
- 就是按照数组中元素存储的顺序,依次拿到数组中的每一个元素。
-
- package com.laity.basicSyntax.day1.bArray;
-
- /**
- * @author : Laity
- * @Project: JavaLaity
- * @Package com.laity.basicSyntax.day1.bArray
- * @date Date : 2021年11月13日 9:54
- * @Description: 数组的遍历
- */
- public class Array3 {
- public static void main(String[] args) {
- int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
- for (int i = 0; i <= 9; i++) {
- System.out.println(array[i]);
- }
- for (int j = 0; j < array.length; j++){
- System.out.println(array[j]);
- }
- // 偷懒小技巧 只能idea支持 array.fori 100.fori
-
- // 增强for 循环
- // 思路:我依次使用数组中的每一个元素,给迭代变量进行赋值
- for (int element : array){
- System.out.println(element);
- }
- }
- } // 注:这个增强for循环同Python中: for i in array:print(i) 一致
-
- // 数组中的引用
- public static void main(String[] args) {
- int[] array = {10, 20};
- swap(array);
- System.out.println(array[0]);
- System.out.println(array[1]);
- }
-
- public static void swap(int[] arr) {
- int temp = arr[0];
- arr[0] = arr[1];
- arr[1] = temp;
- }
- // 数组的排序
- 将数组中的元素按照一定的大小关系进行重新排序
- 选择排序:固定值与其他值依次比较大小,互换位置。
- 冒泡排序:相邻的两个值比较大小,互换位置。
- JDK排序(java.util.Arrays.sort(数组)) // sort 方法 JDK提供默认的是升序排序(从小到大) Python中的sorted
- Arrays.sort(array);
- 顺序查询
- 二分查询
- // 选择排序:固定值与其他值依次比较大小,互换位置。
- package com.laity.basicSyntax.day1.bArray;
-
- /**
- * @author : Laity
- * @Project: JavaLaity
- * @Package com.laity.basicSyntax.day1.bArray
- * @date Date : 2021年11月13日 13:44
- * @Description: 选择排序
- */
- public class ArraySort5 {
- public static void main(String[] args) {
- int[] array = {10, 5, 6, 3, 9, 2, 4};
- int[] arrays = {10, 5, 6, 3, 9, 2, 4, 0, 1, 4, 7, 8};
- sort1(array);
- sort2(arrays);
- for (int i : array) {
- System.out.print(i + ", ");
- }
- System.out.println();
- for (int i : arrays) {
- System.out.print(i + ", ");
- }
- }
-
- /**
- * 使用选择排序,对数组array进行升序排序(从小到大)
- *
- * @param array
- */
- public static void sort1(int[] array) {
- // 选择排序
- for (int i = 0; i < array.length - 1; i++) {
- for (int j = i + 1; j < array.length; j++) {
- if (array[i] > array[j]) {
- // 交换元素
- int temp = array[i];
- array[i] = array[j];
- array[j] = temp;
- }
- }
- }
- }
-
- public static void sort2(int[] array) {
- // 完整版选择排序
- // 用来控制发生了多少趟的比较
- for (int i = 0; i < array.length - 1; i++) {
- // 声明一个变量,用来记录剩余元素中的最小值所在的下标
- int min = i;
- // 让后续的每一个元素,依次和当前记录的最小值进行比较,找出新的最小值
- for (int j = i + 1; j < array.length; j++) {
- // 让第j位的元素和记录的最小值进行比较
- if (array[min] > array[j]) {
- // 更新最小值下标
- min = j;
- }
- }
- // 交换第i位和第min位的元素
- if (i != min) {
- int temp = array[i];
- array[i] = array[min];
- array[min] = temp;
- }
-
- }
- }
- }
- // 冒泡排序:相邻的两个值比较大小,互换位置。
- package com.laity.basicSyntax.day1.bArray;
-
- /**
- * @author : Laity
- * @Project: JavaLaity
- * @Package com.laity.basicSyntax.day1.bArray
- * @date Date : 2021年11月13日 16:46
- * @Description: 冒泡排序
- */
- public class ArraySort6 {
- public static void main(String[] args) {
- // 实例化一个数组
- int[] array = {1, 3, 7, 2, 9, 4, 8, 0, 6, 5};
- // 对数组进行排序
- sort1(array);
- // 循环打印
- for (int i : array) {
- System.out.print(i + ",");
- }
- }
-
- /**
- * 使用冒泡排序对数组进行升序排序
- * 冒泡排序的核心思想:每趟比较从第0位开始依次比较两个相邻的元素,当满足交换条件的时候,交换
- *
- * @param array
- */
- public static void sort1(int[] array) {
- // 循环比较发生了多少趟
- for (int i = 0; i < array.length - 1; i++) {
- // 控制每一趟的比较发生了多少次
- // j < array.length - 1 - i
- for (int j = 0; j < array.length - 1 - i; j++) {
- // 依次比较两个相邻的元素
- if (array[j] > array[j + 1]) {
- int temp = array[j];
- array[j] = array[j + 1];
- array[j + 1] = temp;
- }
- }
- }
- }
- }
- package com.laity.basicSyntax.day1.bArray;
-
- /**
- * @author : Laity
- * @Project: JavaLaity
- * @Package com.laity.basicSyntax.day1.bArray
- * @date Date : 2021年11月13日 16:59
- * @Description: 顺序查询
- */
- public class FindElement7 {
- public static void main(String[] args) {
- int[] array = {1, 3, 5, 6, 9, 7, 2, 0, 10};
- int index = indexOf(array, 50);
- System.out.println(index); // 返回索引
- }
-
- /**
- * 使用顺序查询,查询数组中指定的元素出现的下标
- *
- * @param array 需要去查询的数组
- * @param element 需要查询的元素
- * @return 元素出现的下表;如果元素不存在,则返回-1;
- */
- public static int indexOf(int[] array, int element) {
- // 遍历数组中的每一个元素
- for (int i = 0; i < array.length; i++) {
- // 将每一个元素依次和要查询的元素进行比较
- if (array[i] == element) {
- // 如果比较通过,则这个下标就是要查询的元素下标
- return i;
- }
- }
- // 如果循环走完,还没有结果返回,那就说明这个元素不存在
- // 不存在的元素,我们统一返回-1
- return -1;
- }
- // 即利用数组中间的位置,将数组分为前后两个子表。如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
- // 二分查询,要求数组必须是排序的,否则无法使用二分查询。(就是已经排好序的:升序或者降序的)
-
- package com.laity.basicSyntax.day2.bArray;
-
- /**
- * @author : Laity
- * @Project: JavaLaity
- * @Package com.laity.basicSyntax.day2.bArray
- * @date Date : 2021年11月14日 11:34
- * @Description: 二分查询
- */
- public class BinarySearch {
- public static void main(String[] args) {
- int[] array = {1, 4, 6, 7, 8, 10, 12, 13};
- int index = binarySearch(array, 10);
- System.out.println(index);
- }
-
- /**
- * 从一个数组中,使用二分查询法,查询元素的下标
- *
- * @param array 需要查询的数组
- * @param element 需要查询的元素
- * @return 下标
- */
- public static int binarySearch(int[] array, int element) {
- // 定义两个变量,分别记录范围的上线和下限
- int min = 0, max = array.length - 1;
-
- while (max >= min) {
- // 找到中间下标
- int mid = (max + min) / 2;
- // 判断中间的元素和要查询的元素的大小关系
- if (array[mid] == element) {
- return mid;
- } else if (array[mid] > element) { // 查左边
- // 修改范围的上线
- max = mid - 1;
- } else {
- // 修改范围的下限
- min = mid + 1;
- }
- }
- // 如果循环走完了,依然没有结果返回,说明要查询的这个数据在数组中不存在
- return -1;
- }
- }
- // 概念:可以接收多个类型相同的参数,个数不限,使用方法与数组相同。
- // 在调用方法的时候,实参的数量可以写任意多个。 本质还是一个数组
- // 语法:数据类型... 形参名(必须放到形参列表的最后位,且只能有一个)
-
- package com.laity.basicSyntax.day2.bArray;
-
- /**
- * @author : Laity
- * @Project: JavaLaity
- * @Package com.laity.basicSyntax.day2.bArray
- * @date Date : 2021年11月14日 12:13
- * @Description: 可变长度的参数列表
- */
- public class MutipleParameter {
- public static void main(String[] args) {
- int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
- int Max = getMax(array);
- System.out.println("最大值:" + Max);
- int Min = getMin(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 可以这样写
- System.out.println("最小值:" + Min);
- }
-
- public static int getMax(int[] array) {
- int max = array[0];
- for (int element : array) {
- if (element > max) {
- max = element;
- }
- }
- return max;
- }
-
- public static int getMin(int... arrays) { // int... arrays 不等长参数的写法
- int min = arrays[0];
- for (int element : arrays) {
- if (element < min) {
- min = element;
- }
- }
- return min;
- }
- }
- // int[][] array3 = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
-
- package com.laity.basicSyntax.day2.bArray;
-
- /**
- * @author : Laity
- * @Project: JavaLaity
- * @Package com.laity.basicSyntax.day2.bArray
- * @date Date : 2021年11月14日 14:28
- * @Description: 二维数组
- */
- public class Array2 {
- public static void main(String[] args) {
- // 二维数组的元素访问
- // 1.实例化一个二维数组
- int[][] array = new int[5][3];
- // 2.获取数组中的小数组
- int[] arr = array[1];
- // 3.修改数组中的小数组
- array[1] = new int[]{2, 3, 4, 5, 6, 7, 8};
- System.out.println(array);
- // 4.获取小数组中的数据
- int ele = array[1][4];
- System.out.println(ele);
- // 5.修改小数组中的数据
- array[2][2] = 3;
- System.out.println(array);
- }
-
- public static void initArray() {
- // 1.二维数组的定义和实例化
- // int[][] array; // 声明一个二维数组,这个数组中,存储的每一个元素,都是一个小的一维数组
-
- // 1.1给定一个二维数组的长度,进行二维数组的实例化
- // 此时这个二维数组中存储的元素是 null
- int[][] array1 = new int[5][];
- for (int[] ints : array1) {
- System.out.println(ints);
- }
- // 1.2 给定一个二维数组的长度,同时给定一维数组的长度,进行实例化
- // 此时,这个二维数组中存储的一维数组,已经完成了实例化了
- // 这个3仅仅是初始的长度,后面可以改
- int[][] array2 = new int[5][3];
- System.out.println(array2);
- // 1.3 通过指定的值,进行数组的实例化
- int[][] array3 = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
- System.out.println(array3);
- // 1.4 最简化
- int[][] array4 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
- System.out.println(array4);
- }
- }
- // 里面包含了若干个对数组进行操作的工具方法
- // 工具方法:方便对数组进行操作的方法
-
- package com.laity.basicSyntax.day2.bArray;
-
- import java.util.Arrays; // 导包
-
- /**
- * @author : Laity
- * @Project: JavaLaity
- * @Package com.laity.basicSyntax.day2.bArray
- * @date Date : 2021年11月14日 15:00
- * @Description: Arrays工具类
- * 里面包含了若干个对数组进行操作的工具方法
- * 工具方法:方便对数组进行操作的方法
- */
- public class ArrayTools {
- public static void main(String[] args) {
- // System.arraycopy();
- // 数组拷贝: 将一个数组中的指定位开始的元素拷贝到目标数组中的指定位,拷贝length长度的元素
- // 注意事项:不要发生下标越界的情况
- // arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
- // Object src: 原数组
- // int srcPos: 原数组指定位开始拷贝位置
- // Object dst: 目标数组
- // int dstPos: 目标数组指定位开始拷贝位置
- // int length: 拷贝的元素的数量 就是拷贝的长度
- int[] src = {1, 3, 5, 7, 8, 9, 10};
- int[] dst = {20, 30, 40, 50, 60, 70};
- System.arraycopy(src, 1, dst, 1, 3);
- System.out.println(Arrays.toString(dst));
- }
-
- /**
- * 基本工具的使用
- */
- public static void ArrayUsage() {
- // 1.准备一个数组
- int[] array = {1, 3, 5, 7, 8, 9, 10, 17};
- int[] arr = {1, 3, 4, 7, 8, 9, 10, 17};
- // 2.工具方法:
- // 如果newLength超出了原数组的长度,依然可以拷贝,只是在最后的结果添加了 0
- int[] ret = Arrays.copyOf(array, 5); // 从原数组中拷贝指定数量的元素,到一个新的数组中,并返回这个新的数组
-
- // 2.1 将数组中的元素拼接成字符串返回
- String ret1 = Arrays.toString(ret); // 拼接成字符串返回
- System.out.println(ret1);
-
- // 2.2 从原数组中拷贝指定的范围 [from, to) 的元素,到一个新的数组中,并且返回这个新的数组
- // to 是可以越界的,后面会用0指定的位数,form是不可以越界的,否则会报异常的
- int[] ret3 = Arrays.copyOfRange(array, 2, 7);
- System.out.println(Arrays.toString(ret3));
-
- // 2.3 判断两个数组是否相同
- boolean equals = Arrays.equals(array, arr); // 这个有快捷键 .var
- System.out.println(equals);
-
- // 2.4 使用指定的数据填充数组
- Arrays.fill(array, 8); // 将数组的所有元素都填充为8
- System.out.println(Arrays.toString(array));
-
- // 2.5 对数组中的元素进行排序(升序排序)
- Arrays.sort(array);
- System.out.println(Arrays.toString(array)); // JDK排序
-
- // 2.6 使用二分查询法,查询数组中指定的元素出现的下标
- int index = Arrays.binarySearch(array, 7);
- System.out.println(index);
- }
- }
- package com.laity.basicSyntax.day2.bArray;
-
- import java.util.Arrays;
-
- /**
- * @author : Laity
- * @Project: JavaLaity
- * @Package com.laity.basicSyntax.day2.bArray
- * @date Date : 2021年11月14日 23:45
- * @Description: 数组中的拓展到功能
- */
- public class ArrayExtension {
- public static void main(String[] args) {
- // 数组的扩容: 实例化一个新的指定长度的数组,将原来数组中的元素依次拷贝到这个新的数组中即可
-
- int[] original = {1, 4, 7, 8, 9};
- // 需求:在现有元素的后面添加一个 0
- // 1. 对original数组进行扩容,使其容量加1
- int[] newArray = new int[original.length + 1];
- // 2. 依次将original中的每一个元素拷贝到新的数组中
- for (int i = 0; i < original.length; i++) {
- newArray[i] = original[i];
- }
- // 3.将 0 放到newArray的最后一位
- newArray[newArray.length - 1] = 0;
- // 4.重定向original的地址指向
- original = newArray;
- // 5.遍历数组,输出数组中的所有的元素
- System.out.println(Arrays.toString(original)); // [1, 4, 7, 8, 9, 0]
-
- int[] array = add(original, 10);
- System.out.println(Arrays.toString(array));
-
- // array = remove(original, 3);
- array = newRemove(original, 3);
- System.out.println(Arrays.toString(array));
- }
-
- /**
- * 关于数组扩容的基本思路
- */
- public static void growup() {
- // 关于数组扩容的基本思路
-
- }
-
- /**
- * 希望将一个元素拼接到一个现有数组的最后
- *
- * @param array 现有的数组
- * @param element 需要拼接的元素
- * @return 添加元素之后的数组
- */
- public static int[] add(int[] array, int element) {
- // 1. 对original数组进行扩容,使其容量加1
- // 2. 依次将original中的每一个元素拷贝到新的数组中
- array = Arrays.copyOf(array, array.length + 1);
- // 3.将 element 放到newArray的最后一位
- array[array.length - 1] = element;
- // 4.返回拼接好的数组
- return array;
- }
-
- /**
- * 需要从array数组中移除指定下标位的元素
- *
- * @param array 被操作的数组
- * @param element 被删除元素的下标
- * @return 返回删除元素之后的数组
- */
- public static int[] remove(int[] array, int element) {
- if (element < 0 || element >= array.length) {
- return array;
- }
- // 1.实例化一个新的数组,新数组的长度是原数组的长度-1
- int[] newArray = new int[array.length - 1];
- // 2.拷贝前后两部分的数据
- System.arraycopy(array, 0, newArray, 0, element);
- System.arraycopy(array, element + 1, newArray, element, array.length - 1 - element);
- // 3.返回结果
- return newArray;
- }
-
- public static int[] newRemove(int[] array, int element) {
- if (element < 0 || element >= array.length) {
- return array;
- }
- // 用element位之后的元素依次向前覆盖
- System.arraycopy(array, element + 1, array, element, array.length - 1 - element);
- // 返回结果
- return Arrays.copyOf(array, array.length - 1);
- }
- }
int[] array = new int[5];
// 1. sout // 2. main // 3. 循环遍历数组的时候: array.fori array.for // 4. Arrays中 Arrays.equals(array, arr).var // 5. Alt+Enter // 6. 重写父类的方法 父类的方法名回车即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。