数组
1.数组的理解:数组(Array),是多个相同类型是数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理.
2.数组的相关的概念:
- 数组名
- 元素
- 角标 、下标 、索引
- 数组的长度 : 元素的个数
3.数组的特点:
- 数组是序排列的
- 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
- 创建数组对象会在内存中开辟一整块连续的空间
- 数组的长度一旦确定,就不能修改。
4. 数组的分类:
- 照维数:一维数组、二维数组、。。。
- 照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组
数据结构:
1.数据与数据之间的逻辑关系:集合、一对一、一对多、多对多
2.数据的存储结构:
线性表:顺序表(比如:数组)、链表、栈、队列
树形结构:二叉树
图形结构:
算法:
排序算法:
搜索算法:
public class ArrayUtilsTest { /* * 2. 求数值型数组中元素的最大值、最小值、平均数、总和等 3. 数组的复制、反转、查找(线性查找、二分法查找(了解)) 4. 数组元素的排序算法 */ public static void main(String[] args) { int[] numbers = new int[]{10,20,30,15,16,19}; //求数组中的最大值 int maxNumber = numbers[0];//记录第一个元素的数据 //循环numbers中所有的元素 for (int i = 1; i < numbers.length; i++) { if(maxNumber < numbers[i]){ //记录该值 maxNumber = numbers[i]; } } System.out.println("maxNumber=" + maxNumber); System.out.println("---------------------总和,平均数----------------------"); int sum = 0; //用来记录总和 for (int i = 0; i < numbers.length; i++) { sum += numbers[i]; } System.out.println("sum=" + sum + " 平均数=" + sum / numbers.length); System.out.println("---------------------复制----------------------"); //创建一个数组,长度和numbers的长度一样 int[] copyNumber = new int[numbers.length]; //for循环-将numbers中的数据赋值到copyNumber中 for (int i = 0; i < copyNumber.length; i++) { copyNumber[i] = numbers[i]; } System.out.println("----------------copyNumber------------------"); //修改copyNumber中的值 copyNumber[0] = 100; for (int i = 0; i < copyNumber.length; i++) { System.out.print(copyNumber[i] + " "); } System.out.println(); System.out.println("----------------numbers------------------"); for (int i = 0; i < numbers.length; i++) { System.out.print(numbers[i] + " "); } System.out.println(); } }
数组反转
/* 数组的反转 */ public class ArrayUtilsTest2 { public static void main(String[] args) { int[] numbers = new int[]{10,20,30,15,16,19}; /* //第一种方式:创建新的数组 int[] reverseNumber = new int[numbers.length]; //将numbers中的数据从后向前进行遍历 for(int i = numbers.length - 1; i >= 0; i--){ reverseNumber[numbers.length - 1 - i] = numbers[i]; } //遍历reverseNumber for (int i = 0; i < reverseNumber.length; i++) { System.out.print(reverseNumber[i] + " "); } */ System.out.println(); System.out.println("-----------------------------------------------------"); //第二种方式 : 直接将numbers中的数据进行反转 for(int i = 0, j = numbers.length - 1; i < numbers.length / 2; i++,j--){ int temp = numbers[i]; numbers[i] = numbers[j]; numbers[j] = temp; } //遍历数组中的元素 for (int i = 0; i < numbers.length; i++) { System.out.print(numbers[i] + " "); } } }
数组线性查找
/* 线性查找、二分法查找(了解)) */ public class ArrayUtilsTest3 { public static void main(String[] args) { int[] numbers = new int[]{10,20,30,15,16,19,30}; int findNumber = 30; //要查找的数值 int index = -1; //用来记录查找到的数值的索引位置 for (int i = 0; i < numbers.length; i++) { if(findNumber == numbers[i]){ index = i; break;//不考虑有多个,找到一个就结束 } } //判断是否找到了需要查找数据 if(index == -1){//没找到 System.out.println("亲!!没找到您需要的数据哦"); }else{ System.out.println("您要查找的数值在" + index + "索引位置上"); } } }
冒泡排序
/* 冒泡排序 */ public class BubbleSort { public static void main(String[] args) { int[] numbers = new int[]{10,20,30,15,16,19}; //控制比较几轮 for (int i = 0; i < numbers.length - 1; i++) { //控制比较的次数 for(int j = 0; j < numbers.length - 1 - i; j++){ //判断是否进行交换 if(numbers[j] > numbers[j + 1]){ //交换 int temp = numbers[j]; numbers[j] = numbers[j + 1]; numbers[j + 1] = temp; } } } //遍历数组中的内容 for (int i = 0; i < numbers.length; i++) { System.out.print(numbers[i] + " "); } } }