Java基础学习笔记 Chapter05
2021/8/2 12:35:48
本文主要是介绍Java基础学习笔记 Chapter05,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Chapter05
文章目录
- Chapter05
- 数组、排序、查找
- 数组初始化
- 动态初始化
- 静态初始化
- 数组赋值机制
- 数组拷贝
- 数组反转
- 数组添加
- 排序
- 冒泡排序法(Bubble Sorting)
- 查找
- 二维数组
- 练习
数组、排序、查找
数组初始化
动态初始化
int[] arrayDemo = new int[6]; double[] arrayDemo2; arrayDemo2 = new double[5];
静态初始化
int[] array = {1,2,3};
注意细节:
- 数组是引用类型,数组型数据是对象
- 索引是从0开始
数组赋值机制
- 数组默认情况下是引用传递,附的值是地址。方式是引用传递。
- 区别于基本类型的赋值,是数值的拷贝,而数组是地址的传递。
int[] arr1 = {1,2,3}; int[] arr2 = arr1; // 改变arr2的值,arr1的值也会改变
数组拷贝
数据空间要求是独立的
int[] arr1 = {1,2,3}; //开辟新的数据空间 int[] arr2 = new int[arr1.length]; arr2 = arr1;
数组反转
int[] arr = {11,22,33,44,55,66,77,88,99}; int len = arr.length; int[] arr2 = new int[len]; for(int i = len - 1, j = 0; i >= 0; i--, j++) { arr2[j] = arr[i]; } arr = arr2; // 让 arr 指向 arr2数据空间,arr原来的数据空间 // 就没有变量引用,会被当作垃圾,销毁 for(int i = 0; i < len; i++){ System.out.print(arr[i] + " "); }
int[] arr = {11,22,33,44,55,66,77}; int temp = 0; int len = arr.length; for(int i = 0; i < len / 2; i++) { temp = arr[len - 1 - i]; arr[len - 1 - i] = arr[i]; arr[i] = temp; } for(int i = 0; i < len; i++){ System.out.print(arr[i] + " "); }
数组添加
Scanner myScanner = new Scanner(System.in); int[] arr = {1,2,3}; do { int[] arrNew = new int[arr.length + 1]; for(int i = 0; i < arr.length; i++) { arrNew[i] = arr[i]; } // 将输入的addNum添加到arrNew System.out.println("请输入添加的整数:"); arrNew[arrNew.length - 1] = myScanner.nextInt(); arr = arrNew; // 原来堆空间中的arr指向的数据空间被销 for (int i = 0; i < arr.length; i++){ System.out.print(arr[i] + " "); } System.out.println("\n" + "添加成功,是否继续,请输入y/n"); char key = myScanner.next().charAt(0); if(key == 'n') { break; } } while(true);
排序
- 内部排序:将处理的数据加载到内存中,例如交换式排序、选择式排序和插入式排序。
- 外部排序:大量的数据在内存不够存储,借助外部存储进行排序,例如合并排序法,直接合并排序法。
冒泡排序法(Bubble Sorting)
将五个无序的数字:24,69,80,57,13 使用冒泡排序法将其排成一个从小到大的有序数列。
思路:
数组:[24,69,80,57,13]
第一轮排序:将最大的数放在最后的位置
- 第一次比较:[24,69,80,57,13],不变
- 第二次比较:[24,69,80,57,13],不变
- 第三次比较:[24,69,80,57,13] -> [24,69,57,80,13]
- 第四次比较:[24,69,57,80,13] -> [24,69,57,13,80]
第二轮排序:将第二大的数放在倒数第二的位置
- 第一次比较:[24,69,57,13,80] ,不变
- 第二次比较:[24,69,57,13,80] -> [24,57,69,13,80]
- 第三次比较:[24,57,69,13,80] -> [24,57,13,69,80]
第三轮排序:将第三大的数放在倒数第三的位置
- 第一次比较:[24,57,13,69,80],不变
- 第二次比较:[24,57,13,69,80] -> [24,13,57,69,80]
第四轮比较:将第四大的数放在倒数第四的位置
- 第一次比较:[24,13,57,69,80] -> [13,24,57,69,80]
特点:
- 一共n个元素则需要经过(n-1)次排序
- 每一轮确定一个数的位置
- 当进行比较时,前面的数大于后面的数,进行交换
- 每轮的比较在减少
public class BubbleSort{ public static void main(String[] args) { int[] arr = {10,5,32,78,1,2,0,1,4,9}; int len = arr.length; int temp = 0; // 临时变量 for(int i = 0; i < len - 1 ; i++){ for(int j = 0; j < len - 1 - i; j++) { // 如果前面的数大于后面的数,则交换 if(arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } System.out.println("\n第" + (i+1) + "轮排序"); for(int k = 0; k < len; k++) System.out.print(arr[k] + " "); } } }
查找
顺序查找
编程思想:判断有没有成功,用一个标识符判断,如果值变化,则成功
import java.util.Scanner; public class SeqSearch{ public static void main(String[] args) { String[] names = {"柯南","毛利兰","灰原哀","怪盗基德","园子"}; System.out.println("输入想找的民侦探柯南成员:"); Scanner myScanner = new Scanner(System.in); String findName = myScanner.next(); int index = -1; // 标识符,用于判断是否找到 for(int i = 0; i < names.length; i++) { if(findName.equals(names[i])) { System.out.println("恭喜,找到了!" + "序号为" + (i + 1)); index = i; break; } } if(index == -1) { System.out.println("Sorry,there is no such name that you want to find."); } } }
二分查找(数组是有序的)
二维数组
int[][] arr = new int[2][3];// 第一个是数组包含的一维数组的个数,第二个是一维数组的大小
int[][] arr = {{}}; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j] + " "); } }
二维数组int[2] [3]在内存中
注意:
二维数组中的一维数组中的元素可以不相等
/* 动态创建如下数组 1 1 2 1 2 3 ...... */ // 动态创建数组如下,arr指向堆中一个空间,但是该空间包含了三个null int[][] arr = new int[9][]; for (int i = 0; i < arr.length ;i++) { // 给每个一维数组开空间 arr[i] = new int[i + 1]; for (int j = 0; j < arr[i].length; j++) { arr[i][j] = j + 1; } }
二维数组的声明方式:int[] [] arr、int[] arr[]、int arr[] []。
int x,y[];// x,y分别为一,二维数组 x[0] = y;// error y[0] = x;// ok y[0][0] = x;//error x[0][0] = y;//error y[0][0] = x[0];//ok x = y;//error
练习
- 字符串数组的声明:
String[] strs = new String[]{"yang"};// 第二个综括号不能有数字
-
升序的数组,将一个数插入到该数组中,保证数组仍然是升序
InsertNum.java
public class InsertNum{ public static void main(String[] args) { //升序的数组,将一个数插入到该数组中,保证数组仍然是升序 /*本质数组扩容 + 定位 1. 确定插入数组的哪个索引 2. 扩容 */ int[] arr = {10, 12, 45, 90}; int insertNum = 16; // index将要插入的位置,保留找到的索引值 int index = -1; /* 思路:先遍历整个数组,如果 insertNum <= arr[i],则index = i; 如果遍历完以后没有发现上述的i,则index = arr.length。即将该数置于数组末尾 */ for (int i = 0; i < arr.length; i++) { if (insertNum <= arr[i]) { index = i; break; } } if (index == -1) { index = arr.length; } // 拷贝数组,用j来控制arr数组index后面的元素在插入数字后继续扩容 int[] arrNew = new int[arr.length + 1]; for (int i = 0, j = 0; i < arrNew.length; i++) { if (i != index) { arrNew[i] = arr[j]; j++; } else { arrNew[i] = insertNum; } } arr = arrNew; for (int j = 0; j < arr.length; j++) { System.out.print(arr[j] + " "); } System.out.println(); } }
这篇关于Java基础学习笔记 Chapter05的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南