package com.javase.进阶.数组;
/**
* 关于数组:
* 1、java语言中的数组是一种引用数据类型,数组的父类是Object类。
* 2、数组实际上就是一个容器,可以同时容纳多个元素,(数组就是一个数据的集合)
* 3、数组中存储的元素可以是“基本数据类型”,也可以是“引用数据类型”。
* 4、数组存储在堆内存中。
* 5、如果数组中存储的是java对象,那么数组中实际存储的是该对象的内存地址。
* 6、java中的数组一旦创建,其长度不可变。(也就是说数组长度不可变)
* 7、数组的分类:一维数组、二维数组、三维数组、多维数组......,(一维数组经常使用,二维数组偶尔使用)
* 8、所有的数组对象都有length属性,其用来获取数组中元素的个数
* 9、java中要求数组中元素的类型统一,比如int类型的数组只能存储int类型的元素,不能存储其他类型。
* 10、数组存储元素的空间的内存地址是连续的,内存地址连续是数组的最大特点,数组实际上是一种简单的数据结构。
* 11、所有的数组都是拿第一个"元素"的内存地址作为整个数组对象的内存地址
* 换句话说:数组中存储的首元素的空间的内存地址作为整个数组对象的内存地址
* 12、数组中的每个元素都有下标,下标从0开始,以1递增,最后一个元素的下标是"length-1",
* 我们对数组中元素的获取和修改都是通过下标来完成的
* 13、数组的优缺点:
* 优点: 查询/检索的效率极高,
* 原因是:存储每个元素的空间的内存地址是连续的,每个元素的类型一样,所以占用空间大小一样,
* 知道第一个元素的内存地址和下标,就可以通过数学表达式计算出某个下标上元素的内存地址,
* 直接通过内存地址定位该元素非常迅速,所以数组的检索效率极高。数组当中存储10个元素
* 或者存储1000万个元素的检索效率是一样的。
* 缺点:数组中随机增删元素(除了在最后的位置增删元素)效率很低,因为涉及到被增删元素后面的所有元素都需要向后或向前移动
* 在数组的最后增删元素效率很高,因为涉及不到其他元素的移动问题
* 14、定义一维数组的语法格式:
* int[] a1;
* double[] a2;
* String[] a3;
* User[] a4;
* Object[] a5;
* 15、初始化一维数组:
* 两种方式:
* 静态初始化:
* int[] array = {88,65,123,1024,5};
* 动态初始化:
* int[] array = new int[6]; 这里的6表示数组中元素的个数是6
* 初始化一个长度为6的int类型数组,每个元素的默认值为0。
* String[] names = new String[5]; 这行代码表示初始化一个String类型的数组,其长度为5,每个元素默认值为null。
*/
public class ArrayText {
public static void main(String[] args) {
// 声明一个int类型的数组,静态初始化方式
int[] a = {99,78,123,48,1999};
// 通过length获取数组中元素的个数
System.out.println("数组中元素的个数是:" + a.length);//5
// 通过下标对数组中的元素进行读取
System.out.println("数组中的第一个元素是:" + a[0]);//99
System.out.println("数组中最后一个元素是:" + a[a.length - 1]);//1999
// 通过下标修改数组中的元素
// 把第一个元素改为222
a[0] = 222;
// 把最后一个元素改为0
a[a.length -1] = -1;
// 修改完成后再次读取
System.out.println("数组中的第一个元素是:" + a[0]);//222
System.out.println("数组中最后一个元素是:" + a[a.length - 1]);//-1
// 遍历数组(使用for循环)
// 正序遍历
for (int i = 0; i < a.length ; i++) {
System.out.println(a[i]);
}
System.out.println("-----------------------------");
// 逆序遍历
for (int i = a.length -1; i >= 0 ; i--) {
System.out.println(a[i]);
}
System.out.println("++++++++++++++++++++++++++++");
// 通过调用方法来遍历数组a
printArray(a);
// 动态定义一个数组
String[] str = new String[6];
// 通过调用方法遍历数组str
printArray(str);
}
// 下面的两个遍历数组的方法用到了方法重载,方法名相同,参数列表不同
private static void printArray(String[] str) {
for (int i = 0; i < str.length; i++) {
System.out.println(str[i]);
}
}
public static void printArray(int[] objects){
for (int i = 0; i < objects.length ; i++) {
System.out.println(objects[i]);
}
}
}