/*java
* 数组的使用数组
* 一、数据:相同类型数据的有序结合ide
* 二、数组的长度是肯定的,一旦被建立将没法更改this
* 三、数组中的每一个元素必须相同,不能出现混合类型spa
* 四、元素的数据类型能够任意,主要包括基本类型和引用类型对象
* 五、数组变量属于引用变量,数组属于对象,因此数组是存放在堆中,每一个元素至关于该对象的成员变量。排序
* 索引
* 注意:数组在声明的时候没有分配堆空间,不须要指定长度;当数组在实例化的时候,JVM会分配堆空间,因此此时须要指定数组长度it
*/for循环
import java.util.Arrays;;
public class Array_4_21_01 {
public static void main(String[] args) {
int[] array1; //声明数组变量,不用指定长度
array1 = new int[10]; //数组实例化,须要指定长度
System.out.print("一维数组来啦-> ");
for (int i = 0; i < array1.length; i++) {
array1[i] = i;
System.out.print(array1[i]+" ");
}
System.out.println("");
System.out.println(Arrays.toString(array1));
System.out.println("-------------------------------");
/*
* 元素为引用类型的数组
*/
Man[] mans; //声明一个Man引用类型的数组变量
mans = new Man[5]; //实例化这个Man引用类型的数组
Man m1 = new Man(1, 27);
Man m2 = new Man(2, 28);
mans[0] = m1;
mans[2] = m2;
System.out.println("mans的数组值是 "+Arrays.toString(mans));
//静态初始化
int[] array2 = {2,5,9};
Man[] mans2 = {
new Man(1,29),
new Man(2,30)
};
//动态初始化
int[] array3 = new int[2];
array3[0] = 1;
array3[1] = 2;
System.out.println("array3的数组值是 "+Arrays.toString(array3));
//数组的默认初始化,由于数组的元素至关于类的实例变量,因此数组在被分配空间的时候,每一个元素被按照实例变量的方式被隐式初始化
/*
* int[] a = new int[2]; ->初始化为[ 0 , 0 ]
* boolean[] b = new boolean[2] ->初始化为[ false , false ]
* String[] s = new String[2] ->初始化为[ null , null ]
*/
//数组的copy,使用System.arraycopy这个静态方法,System.arraycopy(原数组, 原数组起始位置, 目标数组, 目标数组起始位置, 拷贝多少个元素);
String[] s1 = {"Microsoft","IBM","Sun","Oracle","Apple"};
String[] s2 = new String[5];
System.arraycopy(s1, 0, s2, 0, s1.length);
System.out.println("s2这个数组是 "+Arrays.toString(s2));
//用加强型for循环遍历数组
for (String e : s2) {
System.out.println(e);
}
//数组排序,主要按照元素的应用类型和基本类型分为两种,元素为引用类型的数组排序咱们后面结合容器来理解
//二分法查找
int[] array4 = {1,3,232,23,543,12,59};
Arrays.sort(array4); //使用二分法查找以前,必须先对数组排序
System.out.println("该元素的索引是 "+Arrays.binarySearch(array4,12));
//填充
Arrays.fill(array4, 1, 4,100); //将数组array4从索引位置1开始3位填充为100
System.out.println(Arrays.toString(array4));
//asList(结合容器理解)
/*
* 多维数组,多维数组的声明和初始化是从低维到高维的顺序进行
*/
//二维数组的静态初始化
int[][] array5 = {
{1,2,3},
{3,4},
{2,5,8,9}
};
System.out.println("array5这个二维数组的一维数组值是 "+Arrays.toString(array5[0]));
for (int[] e : array5) {
for (int f : e) {
System.out.println(f);
}
}
//二维数组的动态初始化
int[][] array6 = new int[3][];
array6[0] = new int[]{1,2,3};
array6[1] = new int[]{3,4};
array6[2] = new int[]{2,5,8,9};
System.out.println("array6这个数组[2][3]的值是 "+array6[2][3]);
//获取二维数组的第一维数组长度是 array6.length ; array6[0].length是获取二维数组第一个数组的长度
}
}
class Man {
private int age;
private int id;
public Man (int id,int age) {
super(); //
this.age = age;
this.id = id;
}
}
/*思考问题
* 一、为何须要数组这个概念?
*
* 二、说出数组的三种初始化方式。
*
* 三、数组的长度可变吗?
*
* 四、数组的复制使用哪一个类的方法实现较好?
*
* 五、说说Arrays类的用法
*
*/