5.数组拓展
本章目标
- 一维数组
- 二维数组
- 常见数组处理
本章内容
一、一维数组
1、求最大工资(贯穿案例)
有一个员工工资 ,要求求出员工最高的
int[] Salary = {18000,15000,10000,8000,13000,9000};
示例
public class TestPay {
public static void main(String[] args) {
int[] Salary = {18000,15000,10000,8000,13000,9000};
int max = Salary[0];
for (int i = 0; i < Salary.length; i++) {
if(Salary[i]>max) {
max = Salary[i];
}
}
System.out.println("最高工资为:"+max);
}
}
2、实现最大值移位到最后
上面的例子已经实现了求最大值,如果想把最大值放到最后一个位置怎么实现?
public static void main(String[] args) {
int[] Salary = {18000, 15000, 10000, 8000, 13000, 9000};
for (int j = 0; j < Salary.length - 1; j++) {
//如果数组前面的值比后面的值大,则交换
if (Salary[j] > Salary[j + 1]) {
int temp = Salary[j + 1];
Salary[j + 1] = Salary[j];
Salary[j] = temp;
}
}
}
3、工资由高到底排序(贯穿案例)
接合上面的数组,已经实现求最大值并移位到最后,那么要实现排序呢?在当前基础上我们需要走n-1趟来完成操作
这里要使用到算法中的冒泡
3.1、冒泡排序思想
以下是要遵循的规则:
- 比较两个队员。
- 如果左边的队员高,则两队员交换位置
- 向右移动一个位置,比较下面两个队员
- 沿着这个队列照刚才那样比较下去, —直比较到队列的最右端。
3.2、排序前
3.3、排序后
3.4、代码实现
public class Main {
public static void main(String[] args) {
int[] Salary = {18000,15000,10000,8000,13000,9000};
int temp = 0;
//控制循环趟数
for (int i = 1; i < Salary.length; i++) {
//控制比较的次数
for (int j = 0; j < Salary.length - i; j++) {
//如果数组前面的值比后面的值大,则交换
if (Salary[j] > Salary[j + 1]) {
temp = Salary[j + 1];
Salary[j + 1] = Salary[j];
Salary[j] = temp;
}
}
}
System.out.println("排序后的结果:");
for (int i = 0; i < Salary.length; i++) {
System.out.print(Salary[i] + ",");
}
}
}}
4、for each循环
如果使用for循环仅仅是为了遍历读取数组元素的值,整数索引并没有其他特别的用途时,Java还提供了一个简略的循环结构:for…each循环
public class ForeachDemo {
public static void main(String[] args) {
int[] a = new int[] { 45, 76, 13, -77, -23, 15 };
for (int element : a) {
System.out.println(element);
}
}
}
二、二维数组(掌握)
1、求多个部门最高工资(贯穿案例)
建立了三个部门的工资数组,想求出工资最高的工资是多少?怎么处理?
定义三个数组
int[] devSalary = { 10000, 8000, 9000, 13000, 18000, 15000 };//研发
int[] testSalary = { 10000, 8000, 9000, 13000, 18000, 15000 };//测试
int[] webSalary = { 10000, 8000, 9000, 13000, 18000, 15000 };//前端
传统解决办法
package com.woniuxy.shop;
public class TestPay {
public static void main(String[] args) {
int[] devSalary = { 10000, 8000, 9000, 13000, 18000, 25000 };//后台
int[] testSalary = { 10000, 8000, 9000, 13000, 18000, 15000 };//测试
int[] webSalary = { 10000, 8000, 9000, 13000, 18000, 19000 };//前端
int max = devSalary[0];
//取出后台最高工资
for (int i = 0; i < devSalary.length; i++) {
if(devSalary[i]>max) {
max = devSalary[i];
}
}
//取出测试最高工资
for (int i = 0; i < testSalary.length; i++) {
if(testSalary[i]>max) {
max = testSalary[i];
}
}
//取出前端最高工资
for (int i = 0; i < webSalary.length; i++) {
if(webSalary[i]>max) {
max = webSalary[i];
}
}
System.out.println("最高工资是:"+max);
}
}
我们看上面的代码,我们操作了三个一维数组,写了三个for循环,代码非常的多,作为程序员就会要把繁琐的事情简单化,我们把它改成一个二维数组
2、二维数组定义
二维数组是一个元素为一维数组的一维数组,可以理解为数组中数组
- 从语法上Java支持多维数组,但从内存分配原理的角度看,Java中只有一维数组,没有多维数组。或者说,从表面上是多维数组,实质上都是一维数组;
- Java中操作多位数组的语法与一维数组类似。在实际应用中,多维以上的数组很少使用,主要使用一维数组。
3、二维数组声明
类型说明符[][] 数组名;
或
类型说明符 数组名[][];
- 数据类型为数组元素的类型
- 用于表明定义了一个二维数组,通过多个下标进行数据访问
- 数组名[下标]表示二维数组里的一个元素,这个元素还是一个一维数组
- 数组名下标表示二维数组里的一个元素(一维数组)里的一个元素
4、二维数组初始化
二维数组的初始化两种方式:
直接赋值
int[][] a = {{1,2},{3,4}};
用new操作符初始化数组
数据类型[][] 数组名 = new 数据类型[二维数组的长度][一维数组的长度];
例如:
int array[][]; //声明二维数组
array = new int[3][4]; //初始化二维数组
或:
int array[][] = new int[3][4];
赋值
array[0][0] = 8000//第一行第一列
array[0][1] = 7600//第一行第二列
...........
array[2][3] = 12800//第三行第四列
5、实现求最大值
public class TestPay {
public static void main(String[] args) {
int[][] Salary = {{ 10000, 8000, 9000, 13000, 18000, 25000 },{ 10000, 8000, 9000, 13000, 18000, 15000 },{ 10000, 8000, 9000, 13000, 18000, 19000 }};//后台
int max = Salary[0][0];
for (int i = 0; i < Salary.length; i++) {//迭代行
for (int j = 0; j < Salary[i].length; j++) {
if(Salary[i][j]>max) {
max = Salary[i][j];
}
}
}
System.out.println("最高工资为"+max);
}
}
三、常见数组处理
1、数组排序
在Java中数组的使用是非常频繁的,因此系统也提供了许多有用的类和方法来帮助开发人员处理数组,其中包括:
import java.util.Arrays;
public class SortDemo {
public static void main(String[] args) {
int[] array = new int[]{10,2,40,5,2,0,9,1};
Arrays.sort(array);
for(int i = 0 ; i < array.length ; i++ ){
System.out.println(array[i]);
}
}
}
2、搜索数组
注意:是对排序后的数组进行搜索,否则可能会出现-索引
import java.util.Arrays;
public class ArraySearchDemo {
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
System.out.println(Arrays.binarySearch(a, 8));
}
}
3、拷贝数组
public class ArrayCopyDemo {
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] b = new int[100];
System.arraycopy(a, 1, b, 2, 9);
for (int i:b)
System.out.print(i + " ");
}
}
时间充足可以拓展常用工具类
思维导图
本文来自博客园,作者:icui4cu,转载请注明原文链接:https://www.cnblogs.com/icui4cu/p/18732516