数组
package zjystudy.com.array;
import java.util.Arrays;
public class Dome03 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
//打印全部数组元素
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
System.out.println("************************************");
System.out.println(Arrays.toString(arrays));
//计算所有元素和
int sum = 0;
for (int i = 0; i < arrays.length; i++) {
sum += arrays[i];
}
System.out.println("sum = " + sum);
//查找最大元素
int max = arrays[0];
for (int i = 0; i < arrays.length; i++) {
if (arrays[i] > max) {
max = arrays[i];
}
}
System.out.println("max = " + max);
}
}
递归使int类型数组反转
package zjystudy.com.array;
public class Dome04 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5,6,7,8,9,10};
printArray(arrays);
reverse(arrays);
printArray(arrays);
//JDK1.5 没有下标 没有下标
// for (int array : arrays) {
// System.out.println(array);
// }
}
//打印数组元素
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i] + "\t");
}
}
//反转数组
public static void reverse(int[] arrays){
int len = arrays.length;
//一个元素或者没有元素直接返回
if (len <= 1){
return;
}else {
re(arrays,0,len-1);
}
}
//start指向交换的前部分,len指向交换的后部分
public static void re(int[] arrays,int start,int len) {
if (len - start > 2){
re(arrays,start + 1,len -1);
}
int temp;
temp = arrays[len];
arrays[len] = arrays[start];
arrays[start] = temp;
}
}
package zjystudy.com.array;
import java.util.Arrays;
public class Dome05 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5,6,7};
System.out.println(Arrays.toString(arrays));
System.out.println(Arrays.toString(reverse(arrays)));
}
//反转数组
public static int[] reverse(int[] arrays) {
int[] result = new int[arrays.length];
//反转操作
for (int i = 0,j = result.length-1; i < arrays.length; i++,j--) {
result[j] = arrays[i];
}
return result;
}
}
多维数组
-
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。
-
二维数组
int a[][] = new int[2][5]; -
解析:以上二维数组a可以看成一个两行五列的数组。
-
思考:多维数组的使用?
num[1][0]
package zjystudy.com.array;
public class Dome06 {
public static void main(String[] args) {
int[][][] array = {{{1,2,3},{7,8,9}},{{10,11,12},{13,14,15},{16,17,19}},{{20,21,22},{23,24,25},{26,27,28}},{{20,21,22},{23,24,25},{26,27,28}}};
System.out.println(array);
System.out.println(array.length);
System.out.println(array[0].length);
System.out.println(array[0][0].length);
System.out.println("*************************************");
for (int i = 0,count = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
for (int k = 0; k < array[i][j].length; k++) {
System.out.print(array[i][j][k] + "\t");
count++;
if (count % 3 == 0){
System.out.println();
}
}
}
}
}
}
Attays类
-
数组的工具类java.util.Arrays
-
由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。
-
查看JDK帮助文档
-
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而"不用"使用对象来调用(注意:是“不用”而不是“不能”)
-
具有以下常用功能:
-
给数组赋值:通过fill方法。
-
对数组排序:通过sort方法,按升序。
-
比较数组:通过equals方法比较数组中元素值是否相等。
-
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
-
紧急补充
在查看.chm文档时
CTRL + “-” 缩小
CTRL + “+” 放大
package zjystudy.com.array;
import java.util.Arrays;
public class Dome08 {
public static void main(String[] args) {
int[] a = {212,43,23,74,54,658,324,1};
System.out.println(a);
//打印数组元素
System.out.println(Arrays.toString(a));
Arrays.sort(a);//升序
printArray(a);
System.out.println("**************************");
//数组填充,下标为2到4填充为0
Arrays.fill(a,2,4,0);
printArray(a);
}
public static void printArray(int[] a){
for (int i = 0; i < a.length; i++) {
if (i == 0){
System.out.print("[");
}
if (i == a.length - 1){
System.out.print(a[i] + "]");
} else {
System.out.print(a[i] + ", ");
}
}
}
}
冒泡排序
-
冒泡排序无疑是最为出名的排序算法之一,总共有八大排序!
-
冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层一次比较,江湖中人人尽皆知。
-
我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为O(n2)。
Java用sort实现对数组的降序排序
1.利用Collections的reverseOrder
import java.util.*;
public class Main {
public static void main(String[] args) {
// 注意这里是Integer,不是int
Integer[] arr={9,8,7,6,5,4,3,2,1};
Arrays.sort(arr,Collections.reverseOrder());
for(int i:arr){
System.out.println(i);
}
}
}
2.利用Comparator接口复写compare
import java.util.*;
public class Main {
public static void main(String[] args) {
Integer[] arr={9,8,7,6,5,4,3,2,1};
Comparator cmp=new CMP();
Arrays.sort(arr,cmp);
for(int i:arr){
System.out.println(i);
}
}
}
class CMP implements Comparator<Integer>{
稀疏数组
-
有的二维数组的很多值是默认值0,因此记录了很多没有意义是数据。
-
解决:稀疏数组
稀疏数组介绍
-
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
-
稀疏数组的处理方式是:
-
记录数组一共有几行几列,有多少个不同值
-
把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
-
package zjystudy.com.array;
public class Dome09 {
public static void main(String[] args) {
//创建一个二维数组11 x 11 0:没有棋子 1:黑棋 2:白棋
int[][] array1 = new int[11][11];
array1[2][3] = 1;
array1[4][5] = 2;
//输出原始数组
System.out.println("输出原始的数组");
for (int[] ints:array1){
for (int AnInt:ints){
System.out.print(AnInt + ", ");
}
System.out.println();
}
System.out.println("**********************************");
//转换为稀疏数组保存
//获取有效值的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array1[i][j] != 0){
sum++;
}
}
}
System.out.println("有效值个数:" + sum);
//2.创建一个稀疏数组
int[][] array2 = new int[sum + 1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
//3.遍历二维数组,将非零的值,存放稀疏数组中
int count = 0;
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
if (array1[i][j] != 0){
count++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array1[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组");
for (int i = 0; i
