Java之数组,
Java之数组,
一 数组
概念:同一种类型数据的集合,其实数组就是一个容器。
好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
与其他容器区别:数组创建后不能改变其大小且存放同一类型数据
因为Java是典型的静态语言,因此它的数组也是静态的,所以想要使用就必须先初始化(为数组对象的元素分配空间)。
1. 数组初始化
(1)静态初始化
初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度
//指定初始值,长度系统自动指定为3.
String[]str1=new String[]{"a","b","c",”d”};
//简化形式。
String[] str={"aa","bb","cc"};
(2)动态初始化
初始化时由程序员显示的指定数组的长度,由系统为数据每个元素分配初始值
//指定长度,没有初始化系统会为其自动初始化。
String[] str=new String[3];
2. 多维数组
多维数组就是数组中的数组。二维数组最常用的数组。
(1) 静态初始化
定义了包含三个元素的数组,而每个数组里面又包含了俩个元素的数组。
int x[][]={{1,2},{2,3},{3,4}};
(2) 动态初始化
定义了包含三个元素的数组,而每个数组里面又包含了三个元素的数组。
int a[][]=new int[3][3];
a[0][0]=1;
a[0][1]=2;
a[0][2]=3;
a[1][0]=4;
a[1][1]=5;
3. 数组内存结构解析
栈:数据使用完毕自动释放,(主函数在栈中)
堆:存放实体,不引用时则垃圾回收。
(1) 基本类型数组内存结构
a:凡是new出来的东西都在堆中存放,例如数组:数组名存放在栈中,数组实体存放在堆中,数组名的值只是数组实体在堆中的起始地址。
b:堆内存中每个实体都有一个内存地址值。数组是通过下标访问其中的每个元素。
c:数组在堆中有默认的初始值:bute,int,short,long默认0;float默认0.0f,double默认0.0;char默认‘\u0000’;boolean默认false;引用数据类型默认null。
d:当数组的值等于null时,就是垃圾,java会在适当的时候启动垃圾回收机制给清除。
(2)引用型数组内存结构
a:把一个数组的值赋值给另一个数组时,只是复制地址,是两个引用指向同一数组。
b:当把其中的一个数组等于null时,只是把栈中的其中一个数组的值设为空,不指向堆中的实体了,但还有一个栈中的数组指向对堆中的实体,所以此时堆中没有垃圾。
4.数组异常
ArrayIndexOutOfBoundsException:操作数组时,访问到了数组中不存在的角标,即数组越界。
NullPointerException:空指针异常。例如:当引用没有任何指向,值为null时,该引用还在用于操作实体。
5.数组常见操作
(1)数组排序
Java数组排序共分为8种排序,最常见的也是面试的时候常考的是选择排序和冒泡排序,而在系统中最快的是希尔排序,如图;
- class ArrayDemo1
- {
- /**
- 数组常见操作:选择排序。(从小到大)
- 选择排序原理是把数组循环两遍,第一遍的数组的第一个元素和嵌套循环里面的元素逐个进行比较。
- 思路:
- (1)对数组中值进行比较,较大值存储到一个临时变量中。
- (2)获取数组中的每个值,每个值,则与变量相比较,如果大则存储到这个临时变量中,小则继续比较其他值。
- (3)当所有值都比较完,则这个临时变量的值就是最大值,输出。
- */
- public static void chooseSort(){
- int[] arr={2,6,65,32,36,58,65,22};
- for(int x=0;x<arr.length-1;x++){//数组的最后一个值不用相比较,所以-1;
- for(int y=x+1;y<arr.length;y++){
- if(arr[x]>arr[y]){
- int temp=arr[x];//
- arr[x]=arr[y];
- arr[y]=temp;
- }
- }
- }
- System.out.println(Arrays.toString(arr));
- }
- /**
- 方式二:冒泡排序。
- 冒泡排序原理就是数组中的相近元素两两相比较,符合条件则换位,
- */
- public static void bubbleSort(){
- int[] arr={2,6,65,32,36,58,65,22};
- for(int x=0;x<arr.length-1;x++){
- for(int y=0;y<arr.length-x-1;y++){
- //-x是因为循环几次比较最后几个值就不再需要比较,可以省去。
- //-1 是因为防止角标越界。
- if(arr[y]>arr[y+1]){
- int temp=arr[y];
- arr[y]=arr[y+1];
- arr[y+1]=temp;
- }
- }
- }
- System.out.println(Arrays.toString(arr));
- }
- public static void main(String[] args)
- {
- //chooseSort();
- bubbleSort();
- }
- }
相关文章
- 暂无相关文章
用户点评