欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java语言程序设计_数组

程序员文章站 2022-07-11 19:54:47
...

6.1数组基础知识

要点提示:一旦数组被建立,它的大小是固定的。使用一个数组引用变量,通过下表来访问数组中的元素。
数组是用来存储数据的集合,但是,通常我们会发下把数组看做一个具有相同数据类型的变量集合会更有用。

6.1.1 声明数组变量

为了在程序中使用数组,必须声明一个引用数组的变量,斌表明数组的元素类型。
声明数组变量的语法:
elementType[] arrayReFvar;(元素类型 []数组引用变量;)

6.1.2 创建数组

不同于基本数据类型变量的声明,声明一个数组变量时斌不在内存中给数组分配任何空间。他只是创建一个对数组的引用的存储位置。
声明一个数组变量、创建数组、然后将数组引用赋值给变量可以合并在一条语句里,如下所示:
elementType[] arrayReFVar= new elementType[arraySize];
(元素类型 数组引用变量=new 元素类型[数组大小];)

6.2 foreach循环

Java支持一个简单的for循环,称为foreach循环,不使用下标变量就可以顺序的遍历整个数组。

6.3 数组的复制

要点提示:要将一个数组中的内容复制到另外一个中,你需要将数组的每个元素复制到另外一个数组中。
复制数组的三种方法:
(1)使用System类中的静态方法arraycopy。
(2)使用clone方法复制数组。
(3)使用循环语句每个的复制数组的元素。

编写程序

import java.util.Arrays;


public class ArrayCopy {//数组扩容
	public static void main(String[] args) {
		int[] a={1,2,3,4,5};
		a=copyOf(a, a.length*2);
		a=null;
//		a={0,1,2,3,4};
		a=new int[0];
		print(a);
		Arrays.toString(a);
	}
	public static int[] copyOf(int[] oldArr,int newLen){
		int[] newArr=new int[newLen];
		for(int i=0;i<Math.min(oldArr.length, newArr.length);i++){
			newArr[i]=oldArr[i];
		}
		return newArr;
	}
	public static void print(int[] a){
		if(a==null){
			System.out.println("Array is null!");
			return;
		}
		if(a.length==0){
			System.out.println("[]");
			return;
		}
		String s="[";//"[1,2,......0]"
		for(int i=0;i<a.length;i++){
			if(i==a.length-1){
				s=s+a[i]+"]";
			}else{
				s=s+a[i]+", ";
			}
		}
		System.out.println(s);
	}
}
public class ArrayDemo {
	public static void main(String[] args) {
		//如何创建一个长度为5的int型数组?
		//引用数据类型的变量
		int[] arr=new int[5];
		int a=3;
		int[] arr2=arr;
		arr2[0]=10;
		System.out.println(arr[0]);
		arr=null;// ∅ 空集 啥都没 纯空 
		//NullPointerException 空指针异常 
		//主要是引用数据类型变量的值为null 要么无意间给了null 要么忘记初始化;
//		System.out.println(arr[10]);
		arr2=arr;
		System.out.println(arr2[0]);
		//什么时候对象成为垃圾 当对象没有被任何引用变量所指向的时候
		//JVM 垃圾回收器 垃圾是及时处理 还是等攒满了在处理
		//其实有必要的话 也可以手动调用垃圾回收器
		System.gc();	
	}
}


public class ArrayDemo2 {
	public static void main(String[] args) {
		int[] arr=new int[5];
		change(arr);
		System.out.println(arr[0]);
		int a=3;
		change(a);
		System.out.println(a);
		change2(arr);
		System.out.println(arr[0]);
	}
	private static void change2(int[] arr) {
		arr=new int[5];
		arr[0]=100;
		return;
	}
	private static void change(int a) {
		a=4;
		return;
	}
	private static void change(int[] arr) {
		arr[0]=10;
		return;
	}
}

public class ArrayDemo3 {
	public static void main(String[] args) {
		int a=10;
		int[] arr=new int[5];
		change(arr,arr,a);
		System.out.println(a);
		System.out.println(arr[0]);
		String s="abc";
		show(s);
		System.out.println(s);
	}
	private static void show(String s) {
		s="cba";
	}
	private static void change(int[] arr1, int[] arr2, int a) {
		arr1[0]=10;
		arr2=new int[5];
		arr2[0]=100;
		a=20;
		return;
	}
}

public class ArrayDemo4 {
	public static void main(String[] args) {
		//可变长参数 传入参数的个数不确定
		show(1,2,3,4,5,6,7);
	}
	public static void show(int ... arr){//有一个数组接受参数
		System.out.println(arr.length);
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}
//		arr[0];
//		arr[1];
	}
}
import java.util.Arrays;


public class Sort {
	public static void main(String[] args) {
		int[] a={3,1,0,5,7,6,4,2,9,8};//从小到大
//		bubbleSort(a);//O(n^2)
//		selectSort(a);//O(n^2)
		insertSort(a);//O(logn)
		/* n=1
		 * 从第n张牌开始
		 * 	判断左边是否有牌
		 * 	  有牌
		 * 		大于 换
		 * 			再次判断此牌左边是否有牌
		 * 				....
		 * 		小于 n++
		 *   没牌
		 *      n++
		 * */
	}
	private static void insertSort(int[] a) {
		int temp=0;
		for(int i=1;i<a.length;i++){
			int e=a[i];
			int j;
			for(j=i;j>0&&a[j-1]>e;j--){
				a[j]=a[j-1];
			}
			a[j]=e;
		}
		System.out.println(Arrays.toString(a));
	}
	private static void selectSort(int[] a) {
		for(int i=0;i<a.length-1;i++){
			for(int j=i+1;j<a.length;j++){
				if(a[i]>a[j]){
					a[i]=a[i]+a[j];
					a[j]=a[i]-a[j];
					a[i]=a[i]-a[j];
				}
			}
		}
		System.out.println(Arrays.toString(a));
	}
	public static void bubbleSort(int[] a){
		for(int i=0;i<a.length-1;i++){
			for(int j=0;j<a.length-1-i;j++){
				if(a[j]>a[j+1]){
					a[j]=a[j]+a[j+1];
					a[j+1]=a[j]-a[j+1];
					a[j]=a[j]-a[j+1];
				}
			}
		}
		System.out.println(Arrays.toString(a));
	}
}
在这里插入代码片