/*
* 数组的使用
* 1、数据:相同类型数据的有序结合
* 2、数组的长度是确定的,一旦被创建将无法更改
* 3、数组中的每个元素必须相同,不能出现混合类型
* 4、元素的数据类型可以任意,主要包括基本类型和引用类型
* 5、数组变量属于引用变量,数组属于对象,所以数组是存放在堆中,每个元素相当于该对象的成员变量。
*
* 注意:数组在声明的时候没有分配堆空间,不需要指定长度;当数组在实例化的时候,JVM会分配堆空间,所以此时需要指定数组长度
*/
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;
}
}
/*思考问题
* 1、为什么需要数组这个概念?
*
* 2、说出数组的三种初始化方式。
*
* 3、数组的长度可变吗?
*
* 4、数组的复制使用哪个类的方法实现较好?
*
* 5、说说Arrays类的用法
*
*/
本文出自 “影魔登场” 博客,请务必保留此出处http://woodywoodpecker.blog.51cto.com/4820467/1636698
原文地址:http://woodywoodpecker.blog.51cto.com/4820467/1636698