数组是引用数据类型,不属于基本数据类型,
数组的父类是object.数组中可以存储基本数据类型的数据,
也可以存储引用数据类型的数据
数组是存储在堆当中,
数组中存储的是对象的引用
数组一旦创建,长度不可变,
所有的数组对象都有length属性,
用来获取数组中的元素的个数,
数组中元素类型必须统一,
数组中收元素的内存地址作为整个数组的内存地址
数组中每个元素都有下标,下标从0开始,最后一个元素的下标是length-1,对数组中的元素进行存取的时候,需要通过下标来进行
数组这种数据类型检索效率高
数组的缺点:由于为了保证数组中每个元素的内存地址连续,所以在数组上随机删除或者增加元素的时候,效率较低,因为随机增刷元素会涉及到后面元素统一向前或者向后使移的条作。因为很难在内存空间上找到一块特别大的连续内存空间,数组不能存储大数超量。
对于数组中最后一个元素的增删,对于效率是没有影响的
一维数组
- 语法格式:
int[]array1;
double[]array2;
boolean[]array3;
String[] array4;
Object[] array5; - 数组的初始化:
静态初始化: int[] array={1,2,3,4};
动态初始化: int[] array=new int{3};3表示数组的元素个数,初始化一个3个元素长度的Int类型数组。默认值是0
public class tast01 {
public static void main(String[] args) {
int a[]={1,2,3,4,5555,55};
System.out.println(a.length);
System.out.println(a[0]);
System.out.println(a[a.length-1]);
for (int i=0; i<a.length;i++){
System.out.println(a[i]);
}
}
}
}
main方法的一维数组String[] args的作用
JVM调用nain方法的时候,会自动传一个string数组过来。JVM默认传递过来的数组长度是0。
public class test02 {
public static void main(String[] args) {
System.out.println(args.length);
}
}
一维数组的扩容:
先新建一个大容量的数组,然后将小容量的数组拷贝到大容量数组当中,数组扩容效率较低,不建议用数组扩容,或者减少使用数组扩容的次数。
public class test02 {
public static void main(String[] args) {
System.arraycopy();
}
}
数组的拷贝:
package com.array.java;
public class test02 {
public static void main(String[] args) {
int []src={1,2,3,3,4,4,44};//拷贝源
int []dest=new int[20];//动态初始化一个元素为20的数组,(拷贝目标)
System.arraycopy(src,0,dest,0,7);//调用arraycopy完成数组的拷贝(源,源的起始位置,目标,目标的起始位置,拷贝元素个数)
//遍历目标数组
for (int i = 0; i < dest.length; i++) {
System.out.println(dest[i]);
}
}
}
二维数组
二维数组是特殊的一维数组,将一维数组当中每个元素当成一位数组
package com.array.java;
public class test02 {
public static void main(String[] args) {
int [][]a={
{1,2,3,6},
{11,22,333},
{333,444,5555}
};
System.out.println(a.length);//3
System.out.println(a[0].length);//4
}
}
作业:使用一位数组模拟栈数据结构
1、这个栈可以存储java中的任何引用类型的数据。
2、在栈中提供push方法模拟压栈。(栽满了,要有提示信息。)
3、在栈中提供pop方法模拟弹栈。(栈空了,也有有提示信息。)
4、编写测试程序,new栈对象,调用push pop方法来模拟压栈弹栈的动作。
public class Mystack{//栈类
//提供一个数组来存储栈中的元素object[]elements;
//栈帧(永远指向栈顶部的元素)
//每加1个元素,栈帧+1//每减1个元素,栈帧-1
int index;
//构造方法
//构造方法是不是应该给一维数组一个初始化容量。
//push方法(push方法压栈)
//压栈表示栈中多一个元素。
//但是栈如果已满,压栈失败。
//这个方法的参数以及返回值类型自己定义。
//pop方法(pop方法弹栈)
//弹栈表示栈中少一个元素。//但是栈如果已空,弹栈失败。
//这个方法的参数以及返回值类型自己定义。
main(){
测试.
}
第二题:
为某个酒店编写程序:酒店管理系统,模拟订房、退房、打印所有房间状态等功能。
1、该系统的用户是:酒店前台。
2、酒店使用一个二维数组来模拟。Room[][]rooms;"
3、酒店中的每一个房间应该是一个java对象:Room
4、每一个房间Room应该有:房间编号、房间类型、房间是否空闲.
5、系统应该对外提供的功能:
可以预定房间:用户输入房间编号,订房。
可以退房:用户输入房间编号,退房。
可以查看所有房间的状态:用户输入某个指令应该可以查看所有房间状态。