数组的属性
1.长度length,
2.下标index,
3.元素个数size,
4.存储
数组的定义
一维数组:
数据类型[ ] 变量名=new 数据类型[length] 如 int[ ] arr=new int[10]
数据类型[ ] 变量名={元素1,元素2,……} 如 int[ ] array={a,1,12,ab,……}
二维数组:
数据类型[ ][ ] 变量名=new int[length1][length2]
如int[ ][ ] arr=new int[10][18] 10代表有10个一维数组 18代表每个一维数组里有18个元素
如int[ ][ ] arr={{一维数组1},{一维数组2},{一维数组3},……}
(一)静态数组的使用
1.下标的使用
arr[8]表示在一维数组中下标为8的数,即第9个数
arr[8][6]表示在二维数组中第9个一维数组中的第7个数
2.遍历
一维数组的遍历
for(int i=0;i<arr.length;i++){
int a=arr[i];
System.out.println(a);
}
二维数组的遍历
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[0].length,j++)
int b=arr[i][j];
System.out.println(b);
}
//arr.length表示二维数组中一维数组的个数
//arr[0].length表示二维数组中每个一维数组的元素个数
//二维数组中每个一维数组的元素个数相等
3.存取
存:变量名[下标]=元素 如:arr[8]=99
取:数据类型 变量名=数组名[下标]
注意存取的过程中,下标的使用不要超过数组的长度,防止越界。
(二)动态数组arraylist的使用
构造方法:增加、获取、移除
根据使用者传入的长度(initialcapacity)进行初始化
1.首先需要创建一个MyArray类
public class MyArray(){
int length;
int index;
int size;
Object[] valueArray={ };
//构造方法
public MyArray(int initialCapacity){
if(inttialCapacity<=0){
throw new IllegalArgumentException("参数非法 initialCapacity="+initialCapacity+"<=0");
}
length=inttialCapacity;
index=0;
size=0;
valueArray[]=new Object[length];
//initialCapacity初始化长度
}
}
2.扩容方法
//初始化长度20,20扩容到30
public void add(Object e){
//初始下标为0,长度为20
//初始下标小于长度
//扩容前执行后三行代码
//index++直到下标大于初始长度时,调用if内代码
if(index>length){
int oldlength=length;//创建一个旧长度,将长度赋值给旧长度
int newlength=oldlength+(oldlength>>1);//创建一个新长度,旧长度的1.5倍为新长度
Object[] newArray=new Object[newlength];//创建一个新的数组对象
for(int i=0,i<oldlength,i++){
newArray[i]=valueArray[i];//将旧数组的元素依次存入新数组
}
valueArray=newArray;//新数组赋给旧数组
length=newlength;//新长度赋给旧长度
}
//旧数组的长度成功从20扩容到30
valueArray[index]=e;//继续存储,此时旧数组长度为30,index不会越界
index++;
size++;
}
public static void main(String[] args){
MyArray myarray=new MyArray(20);//初始化长度20
for(int i=0;i<30,i++){//存储30个元素,需要扩容
myarray.add("qwb");//调用add方法,括号内写参数,即元素为"qwb"
}
}
3.获取方法
public Object get(int index){
if(index<size){//判断下标是否在数组内
return valueArray[index];//返回所需获取的数组值
}
return null;//越界则输出一个空值
}
public static void main(String[] args) {
//调用方法
MyArray myarray=new MyArray(20);
myarray.get(15);
System.out.println(myarray.get(15));
}
4.移除方法
public Object remove(int index){
if(index<size){
valueArray[index]=null;
}
return null;
}
public static void main(String[] args) {
//调用方法
MyArray myarray=new MyArray(20);
myarray.remove(20);
System.out.println( myarray.remove(20));
}
(三)泛型的使用
(1)泛型:
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
(2)语法:
格式:类名 <通配符>
通配符任何单词字母都可以,通常用E,表示元素。
通配符可以声明参数类型以及返回值类型
基本数据类型 | 封装类型(引用类型) |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character/String |
boolean | Boolean |
(3)举例:
ArrayList<Integar> list=new arraylist();
list.add(10);
//list.add("qwb");
当在<>内定义了数据类型int类后,之后的参数则必须是int类,不可以使字符类或者别的类型。
同理,也可以在<>内设置不同的封装类型,来对代码行为进行限制。