java复习笔记————数组小总结

1.数组的定义

C语言风格:int a[]={1,5,5,4,5,4};
java风格(面向对象风格,推荐!) int[] b={2,3,3,5,4,3};

静态初始化和动态初始化

int[] a=new int[]{2,423,42,3}//静态初始化
int[] a={2,3,8,5,3,123}//静态初始化简化版
int[] c=new int[5]//动态初始化
int num=sc.nextInt() int[] c=new int[num] 数组初始化的大小取决于用户输入

动态初始化后系统的默认赋值分别是多少
在这里插入图片描述

2.遍历数组

数组的遍历有普通for循环遍历和foreach遍历两种情况

	int[] a= {1,34,32,124,31,3};
		//普通的for循环遍历
		for (int i = 0; i < a.length; i++) {
			System.out.println(a[i]);
		}
		
		//foreach循环遍历

		for(int c:a) {
			//只读,不可修改数据
			System.out.println(c);
			//如果修改c的值也只是对读取的当前c值做了修改,并没有改变数组的值
		}

3.排序

冒泡排序
在这里插入图片描述

冒泡排序的的步骤
循环
交换
回手掏(减少比较次数)

	public static void foamsort(int[] arr) {
	    for(int i=arr.length-1;i>0;i--){
	        boolean flag = false;
	        for(int j=0;j<i;j++){
	            if(arr[j] > arr[j+1]){
	                int tmp = arr[j];
	                arr[j] = arr[j+1];
	                arr[j+1] = tmp;
	                flag = true;
	            }
	        }
	        if(!flag) break;
	    }
		for(int a:arr) {
			System.out.println(a);
		}
	}

插入排序

我用的二分法查找到对应的下标值,返回下标值,然后对于下表后面的元素进行后移

public static int insertsort(int[] arr,int l,int r,int va) {
		int mid=l+(r-l)/2;
		int index=0;
		if(l<r) {
			if(arr[mid-1]>va) {
				crsort(arr, l, mid-1, va);
			}else if(arr[mid+1]<va) {
				crsort(arr, mid+1, r, va);
			}else if(arr[mid-1]<=va&&arr[mid]>=va) {
				index=mid;
			}else if(arr[mid+1]>=va&&arr[mid]<=va) {
				index=mid+1;
			}
		}
		
		return index;
	}

选择排序:比较大小换位置
很暴力

	public static void choosesort(int[] arr) {
		for (int f = 0; f < arr.length; f++) {
			for (int i = f+1; i < arr.length; i++) {
				if(arr[i]<arr[f]) {
					arr[i]=arr[f]+arr[i];
					arr[f]=arr[i]-arr[f];
					arr[i]=arr[i]-arr[f];
				}
			}
		}
		for(int a:arr) {
			System.out.println(a);
		}
	}

4.Arrays类

Arrays类的总结来自己虎老狮,大家可以去关注一波微信公众号获取知乎

import java.util.Arrays;
public class TestArrays{
	public static void main(String[] args) {
		int[] arr1 = { 2, 1, 5, 4, 3 };
		String sArr1 = Arrays.toString(arr1);// 数组转为字符串
		System.out.println(sArr1);
		// Arrays.sort(arr1);//排序(升序)
		Arrays.parallelSort(arr1);// Java 8的并行排序,支持多核CPU,更快
		System.out.println("排序后:" +Arrays.toString(arr1));
		// Arrays.binarySearch:(升序排列的数组)二分查找
		// 参数2是要查找的元素。
		// 返回值为索引;找不到返回负数
		int _index = Arrays.binarySearch(arr1, arr1.length);
		System.out.println(_index);
		// Arrays.copyOf:按长度复制
		// 多的补0/false/null
		int[] b = Arrays.copyOf(arr1, 10);
		System.out.println("copyOf:" +Arrays.toString(b));
		// Arrays.fill:同值填充
		Arrays.fill(arr1, -1);
		System.out.println("fill:" +Arrays.toString(arr1));
	}
}

补充

a= Arrays.copyOf(a , 2 * a.length);这个用法通常用来增加数组的大小
C++ 注释:Java 数组与 C++ 数组在堆栈上有很大不同, 但基本上与分配在堆(heap) 上
的数组指针一样。也就是说,
intD a = new int[100]; // Java
不同于
int a[100]; // C++
而等同于
int* a = new int[100]; // C++
Java 中的 [ ] 运算符被预定义为检查数组边界,而且没有指针运算, 即不能通过 a 加
1 得到数组的下一个元素。

5.数组降序

5.1.使用list集合以及reverse:先升序排列然后通过倒置,逆序

Integer _arr[] = { 5, 3, 1, 2, 4 };
Arrays.sort(_arr);
List< Integer > asList = Arrays.asList(_arr);
Collections.reverse(asList);//

5.2使用Comparator接口,重写sort方法

public static void 降序sort版() {
		// 类,或包装类
		int[] _arr = { 5, 3, 1, 2, 4 };
		Arrays.sort(_arr, new Comparator<Integer>() {
		@Override
		public int compare(Integer o1, Integer o2)
		{
		return o2 - o1;
		}
		});
}

5.3使用Comparator接口,实现对字符串数组的排序

	public static void charsort(String[] str) {		
		//调用并且重写排序
		Arrays.sort(str,new Comparator<String>() {
			@Override
			public int compare(String o1, String o2)
				{
					int o1len=o1.length();//获取长度
					int o2len=o2.length();
				for(int i=0;i<o1.length();i++) {//遍历每一个字符
					char a=o1.charAt(i);				
					if(a>'0'&&a<='9'||a>='a'&&a<='z'||a>='A'&&a<='Z'||a==' '||a=='_') {}
					else//如果是中文就++
						o1len++;				
				}
				for(int i=0;i<o2.length();i++) {
					char a=o2.charAt(i);				
					if(a>'0'&&a<='9'||a>='a'&&a<='z'||a>='A'&&a<='Z'||a==' '||a=='_') {}
					else//如果是中文就++
						o2len++;				
				}
					return  o1len-o2len;//按长度的升序排列
				}
			});
		for (int i = 0; i < str.length; i++) {
			System.out.println(str[i]);
		}
	}

6.二维数组

数组的初始化

和一维数组一样也可以有c++的写法和java的写法,这里就不推荐用c++的写法了,直接来java的
int[][] _arr21 = { { 1, 2 }, { 3, 4 } };
int[][] _arr22 = new int[2][3];
int[][] _arr23 = new int[2][];// 第二维度可以省略

二维数组的遍历

		//二维数组的遍历
		int[][] a= {{2,3,4,5,5},{4,3,34,34,43},{67,422432,423,2,2},{6,3,2,1,19}};
		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < a[i].length; j++) {
				System.out.println(a[i][j]);
			}
		}
		
		//foreach遍历
		for(int[] arr:a) {
			for(int arr1:arr) {
				System.out.println(arr1);
			}
		}

7.二维数组-矩阵乘法

在这里插入图片描述
代码:

import java.util.Arrays;
public class 二维矩阵相乘 {
		public static void main(String[] args) {
		int m = 2, p = 3, n = 2;
		int[][] A = { { 1, 2, 3 }, { 4, 5, 6 } };
		int[][] B = { { 1, 4 }, { 2, 5 }, { 3, 6 } };
		int[][] C = new int[m][n];
		for (int i = 0; i < m; i++) {
				for (int j = 0; j < n; j++) {
						for (int k = 0; k < p; k++) {
						C[i][j] = C[i][j] + A[i][k]* B[k][j];
						}
				}
		}
		// ------------
		for (int[] is : C) {
		System.out.println(Arrays.toString(is));
		}
		}
}
原创文章 73 获赞 64 访问量 2730

猜你喜欢

转载自blog.csdn.net/qq_42147171/article/details/105095163