Java的数组入门与进阶使用

【Java总结】-【入门篇(第二周)】 后续每周总结一次

JAVA中数组的介绍与使用

一、概述

1.1 定义

  • 数组是一种数据结构,用来存储同一类型值的集合。简单说,就是一个存放同种类型的容器。
  • 数组是指一组数据的集合,数组中的每个数据称为元素。但同一个数组里只能存放类型相同的元素。
  • 数组存放于一段连续的内存空间

1.2 使用数组的益处:

  • 数组可将其中的每一个值自动添加对应的编号,每一个值称为一个元素,元素从0开始编号,方便对每个元素的管理

二、数组的创建和使用

2.1数组的创建步骤

  • 声明一个数组类型的引用变量,简称数组变量。
  • 用关键字new语句构造数组的实例,new语句为数组分配内存,并且为数组中每个元素赋一个默认值。
  • 初始化,即为数组的每个元素设置合适的初始值

2.2数组的声明与初始化

数组的初始化就是给其分配空间

  • 方式一: 先声明再初始化
public class ArraysDemo {
	public static void main() {
		// 这里举例子都用 `int` 类型
		/* 
		先声明再初始化,必须明确的指定的容量大小
		,进行动态赋值
		*/
		int[] arr;
		arr = new int[10];
		// 先声明再初始化,进行静态赋值
		int[] arr1;
		arr1 = new int[]{1,2,3,...1};
	}
}
  • 方式二: 声明的同时初始化
public class ArraysDemo {
	public static void main() {
		// 这里举例子都用 `int` 类型
		/*声明的同时进行初始化*/
		int[] arr = new int[10];	
		// 声明同时初始化,进行静态赋值
		int[] arr1 = new int[]{1,2,3,...1};
		// 声明同时初始化,进行静态赋值,java内部猜测右边的数据类型
		int[] arr2 = {1,2,3,...1};
	}
}

2.3数组的默认初始值

  • byte,short,int,long 类型 的初始值默认为 0
  • char 类型 的初始值为 Unicode 万国码 0对应的值
  • float,double 类型 的初始值为 0.0
  • boolean 类型的初始值为false
  • String 等应用类型的初始化值为null
public class ArraysDemo {
	public static void main() {
		// 整形
		byte[] arrByte = new byte[10];
        short[] arrShort = new short[10];
        int[] arrInt = new int[10];
        long[] arrLong = new long[10];
        // 浮点类型
        float[] arrFloat = new float[10];
        double[] arrDouble = new double[10];
        // 字符类型 
        char[] arrChar = new char[10];
        // 布尔类型
        boolean[] arrBoolean = new boolean[10];
        // 引用类型的代表
        String[] arrString = new String[10];

        System.out.println(
        		"byte数组的初始化值:" + arrByte[0] +
                "short数组的初始化值" + arrShort[0] +
                "int数组的初始化值" + arrInt[0] +
                "long数组的初始化值" + arrLong[0] +
                "float数组的初始化值" + arrFloat[0] +
                "double数组的初始化值" + arrDouble[0] +
                "char数组的初始化值" + arrChar[0] +
                "boolean数组的初始化值" + arrBoolean[0] +
                "String数组的初始化值" + arrString[0] );
	}
}

三、数组的赋值与遍历输出

3.1数组的赋值

注意:
1.这里数组的下标是从0开始的,所以10个空间就是0~9.因为计算机底层就是0,1编码为了不浪费最开始的一个空间,就设定为从0开始。
2.数组的length属性能够表示数组的长度 通过 数组名.length 表示

  • 方式一:
    普通赋值法:
public class ArraysDemo {
	public static void main() {
		int[] arr = new int[10];
		arr[0] = 1;
		arr[1] = 2;
		...
		arr[9] = 10;
	}
}
  • 方式二:
    循环赋值法:
public class ArraysDemo {
	public static void main() {
		int[] arr = new int[10];
		for(int i = 0;i < arr.length;i++) {
			arr[i] = i; 
		}
	}
}
  • 方式三:
    数组赋值给数组
public class ArraysDemo {
	public static void main() {
		int[] arr = {1,2,3,4,5,6,7,8,};
		int[] arr1;
		arr1 = arr; // 这里使得arr1的指向arr的引用地址
	}
}

3.2数组的遍历输出

  • for循环输出
public class ArraysDemo {
	public static void main() {
		int[] arr = {1,2,3,4,5,6,7,8,};
		for(int i = 0; i < arr.length; i++){
			System.out.print(arr[i] + "\t");
		}
	}
}
  • 增强for循环输出
public class ArraysDemo {
	public static void main() {
		int[] arr = {1,2,3,4,5,6,7,8,};
		for(int number : arr){
			System.out.print(number + "\t");
		}
	}
}
  • while,do-while也能循环遍历只要设置个标志位
public class ArraysDemo {
	public static void main() {
		int[] arr = {1,2,3,4,5,6,7,8,};
		int i = 0;
		// while循环
		while( i < arr.length){
			System.out.print(arr[i] + "\t");
			i++;
		}
		// do-while循环
		do{
			System.out.print(arr[i] + "\t");
			i++;
		}while(i< arr.length);
	}
}

四、多维数组

4.1声明加创建

注意: 多维数组与二维数组类似,这里只列举二维。

public class ArraysDemo {
	public static void main() {
		// 方式一:
		int[][] arr = {{1,2},{2,1}};
		// 方式二:
		int[][] arr1 = new int[5][4];
		// 方式三:
		int[][] arr2 ;
		arr2 = new int[4][5];
		// 方式三:
		int[][] arr3 = new int[][]{{3,2},{2,3},{4,5}};
		// 方式四:
		int[][] arr4;
		arr4 = new int[][]{{3,2},{2,3},{4,5}};
		// 方式五:
		int[][] arr5 = new int[5][];
	}
}

4.2赋值加遍历输出

public class ArraysDemo {
	public static void main() {
		int[][] arr1 = new int[5][4];
		// 多重for循环 遍历
		for(int i = 0; i < arr1.length; i++) {
			for(int j = 0; j < arr1[i].length; j++) {
				arr[i][j] = i*j;
			}
		}
		// 当然这里也可以用while do-while 嵌套循环 不在一一举例
	}
}

五、数组的排序算法

5.1冒泡排序法

算法思想: 首先我们要有一个数组,里面存放着待排序的元素列表,我们如果需要把比较大的元素排在前面,把小的元素排在后面,那么需要从尾到头开始下面的比较操作:

  • 从尾部开始比较相邻的两个元素,如果尾部的元素比前面的大,就交换两个元素的位置。
  • 往前对每个相邻的元素都做这样的比较、交换操作,这样到数组头部时,第 1 个元素会成为最大的元素。
  • 重新从尾部开始第 1、2 步的操作,除了在这之前头部已经排好的元素。
  • 继续对越来越少的数据进行比较、交换操作,直到没有可比较的数据为止,排序完成。
public class ArraysDemo {
	public static void main() {
		int[] arr = {10,2,3,41,2,24,4};
		/*
			从小到大排序
		*/
		for(int i = 1; i < arr.length; i++) {
			for(int j = 0; j < arr.length-i; j++) {
				if(arr[j] > arr[j+1] ) {
						int temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
				}
			}
		}
	}
}

5.2选择排序法

算法思想:

  • 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据要小,再按这种方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使整个数据变成有序序列。
public class ArraysDemo {
	public static void main() {
		int[] arr = {10,2,3,41,2,24,4};
		/*
			从小到大排序
		*/
		for (int j=0; j < arr.length; j++)  
        {  
            //i=j,每比较一轮就减少一个数,比较后,再用第二个数获得后面的最小值  
            for (int i=j+1;i < arr.length; i++)  
            {  
                //换值  
                if (arr[j] > arr[i])  
                {  
                    int temp = 0;  
                    temp = arry[j];  
                    arr[j] = arry[i];  
                    arr[i] = temp;  
                }  
            }  
        }  
	}
}

5.2JDK排序法

JDK内部提供了一个排序算法 Arrays.sort()

public class ArraysDemo {
	public static void main() {
		int[] arr = {10,2,3,41,2,24,4};
		/*
			从小到大排序
		*/
		Arrays.sort(arr);
	}
}

六、数组的拷贝与扩容

6.1数组的拷贝

  • 1、普通拷贝法
public class ArraysDemo {
	public static void main() {
		int[] arr = {10,2,3,41,2,24,4};
		int[] arr1=new int[arr.length];
		for(int i = 0;i < arr.length; i++) {
			arr1[i] = arr[i];
		}
	}
}
  • 2、arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
/*
	参数1,需要被复制的目标数组
    参数2,从这个数组的哪一个位置开始复制
    参数3,需要把数据复制到的另外的那一个新的数组对象
    参数4,复制到新数组里面哪个位置(从这个位置开始算)
    参数5,复制的目标数组的长度
 */
public class ArraysDemo {
	public static void main() {
		int[] arr = {10,2,3,41,2,24,4};
		int[] arrs = new int[7];
		System.arraycopy(arr,0,arrs,0,arr.length);
	}
}
  • 3、copyOf(Object src)
public class ArraysDemo {
	public static void main() {
		int[] arr = {10,2,3,41,2,24,4};
		int[] arrs;
		arrs = Arrays.copyOf(arr);
	}
}

数组的总结与心得:

  • 数组在大部分高级语言中都有定义是一个数据结构之一,具有很好的存储数据方式。本周梳理构建数组在Java基础中十分重要,后续数组还有许多的java定义好的方法在java.util.Arrays;包里,使用可见JDK 1.8官方文档。本期就总结到这里
发布了6 篇原创文章 · 获赞 9 · 访问量 426

猜你喜欢

转载自blog.csdn.net/lxn1214/article/details/104326113