一维数组
1、idea换背景色:File->Setimgs->Editer->Color Schame
2、Java语言中的数组是一种引用数据类型,不属于基本数据类型。数组的父类是object类
3、数组是一个容器,可以同时容纳多个元素(数组是一个数据的集合)
4、数组当中可以存储基本数据类型也可以存取引用数据类型
5、数组因为是引用数据类型,所以数组对象是堆内存当中(数组是存储在堆内存当中的)
6、数组在内存方法是怎样的
7、数组当中如果存储的是“Java对象”,实际上存储的是对象的引用(对象的内存地址),数组中不能直接存储Java对象
8、数组一旦创建,Java中规定长度不可变
9、数组的分类包括一维数组,二维数组及其多维数组
10、所有的数组对象都有length属性,用于获取数组中元素的个数
11、Java中数组要求数组元素类型统一,比如int类型数组只能存储int类型元素
12、数组在内存方面,存储的时候,存储元素的内存地址是连续的(存储的每一个元素都是有规则的),数组实际上是一种数据结构
13、数组中首元素的地址作为整个数组对象的地址
14、数组中每个元素都是有下标的,从0开始以1递增,最后一个元素下标为length-1
15、数组的优缺点
优点:查询、查找、检索某个下标上的元素时效率极高,可以说是查询效率最高一个数据结构(第一、每一个元素的内存地址是连续的;第二、每一个元素的类型相同,所以占用空间大小一样;第三、知道元素内存地址,知道下标,所以通过一个数学表达式可以计算出某个元素的内存地址,通过内存地址定位元素,所以数组的检索效率是最高的)
缺点:第一、由于为了保证数组中每个元素的存储是连续的,所以在数组上随机增加删除元素效率较低,因为随机增加删除元素涉及后面元素的移位(注意:对于数组中最后一个元素的增加删除是不受影响的)
第二、数组不能存储大数据量,因为很难在内存空间上找到一块大的连续的内存空间
16、如何声明、定义一个数组?
语法格式:int[] array1; double[]array2; String[]array2…..
17、怎么初始化一个一维数组
静态初始化一维数组:
int[] array ={1,2,3}
动态初始化一维数组:
int[] aray = new int[5] //这里的5表示数组的元素个数;初始化一个5个长度的int类型数组,每个元素默认值0
String[] array = new String[5]// 初始化一个5个长度的String类型数组,每个元素默认值null
18、当一个方法的参数是一个数组
Public class ArrayTest{
Public static void main(String[] args){
int[] a = {1,2,3};//静态初始化一维数组
printArray(a);
int[] a2 =new int[4]; //动态初始化一维数组
printArray(a2);
printArray(new int[3]);//这样也可以
printArray(new int[]{1,2,3});//如果直接传递一个静态数组语法应该这样写
}
//为什么使用静态方法:方便不需要你new对象
public static void printArray(int[] array){
for(int I = 0;i
System.out.println(array[i]);
}
}
}
19、main方法中的一维数组有什么用(JVM调用main方法的时候会自动传递一个String数组过来)
注意:args.length = 0 //默认长度为0(空数组)
20、对于数组来说,实际上只能存储Java对象的“内存地址”数据中存储的每个元素是“引用”
21、一维数组扩容
(1)在Java中数组一旦确定,长度不可变
(2)Java中对数组的扩容:新建一个大容量的数组,然后将小容量数组的数据一个一个拷贝到大数组中(数组扩容效率较低)
(3)调用System.arraycopy(五个参数)进行数组拷贝
public class ArrayTest{
public static void main(String[] args){
int[] src = {1,2,3,4,5};
int[] dest = new int[20];
System.arraycopy(src,1, dest,3,3);//(源,源的起始位置,目标,目标的起始地址,拷贝长度)
}
}
二维数组
1、二维数组其实就是特殊的一维数组,特殊在这个一维数组(二维数组)中的每一个元素是一个一维数组。
2、三维数组是一个特殊的二维数组,这个二维数组(三维数组)中的每一个元素是一个二维数组。
3、二位数组静态初始化int[][] a = {{1,2,3},{1,2,3,4},{1,2,3,4,5}}
动态初始化:int[][] a= new int[3][4]
4、二维数组的遍历
public class ArrayTest{
public static void main(String [] args){
String[][] array={{“java”},{“c++”},{“python”},{“oracle”}};
for(int i= 0;i
for(int j=0;j
System.out.println(array[i][j]);
}
}
}
}
Idea中搜索框:双击shift
例题:用一维数组模拟找数据结构
public class MyStack{
private Object[] elements; //Object可以存储Java中任何类型的引用数据;注意“abc”这是一个字符串对象,字符串在Java中不需要new也是一个对象。
private int index;
Public MySatack(){
This.elements = new Object[10];//默认初始化容量为10
This.index = -1;//初始化栈针
}
public void push(Object obj){//压栈方法
if(this.index = this.elements.length - 1){
System.out.println(“压栈失败,栈已满”);
return;
}
index++;
elements[index] = obj;
System.out.println(“压栈”+obj+”元素成功,栈针指向”+index);//所有的 System.out.println()方法如果输出引用类型,自动调用引用的toString()方法(即obj.tostring())
}
public Object pop(){ //弹栈的方法
if(index<0){
System.out.println(“栈已空,弹栈失败”);
return null;
}
System.out.println(“弹栈”+obj+”元素成功,栈针指向”+index);
return elements[--index];
}
//alt + insert自动生成get,set方法
public Object[] getelements(){
return elements;
}
Public void setelements(Object[] getelements){
this.elements = elememts;
}
}
Public class ArrayTest{ //测试程序
Public static void main(String[] args){
MyStack stack = new MyStack();
Stack.push(new Object());
Stack.pop();
}
}
Java.util.Arrays(数组排序)
1、工具类方法一般是静态的,不需要new对象,使用类名调用就可以
public class ArraysTest{
int[] array = {12,1,3,5,8,2};
Arrays.sort(array);
public static void main(String[] args){
if(int i=0;i
System.out.println(“array[i]”)
}
}
活动地址:CSDN21天学习挑战赛