数组
数组存放在堆内存中,是引用数据类型,只能存放Java对象的内存地址。
·优点:查找某个下标上的元素效率极高
1.数组以第一个元素内存地址已知
2.数组上每个内存地址是连续的
3.数组中每个元素所占空间大小是一样的
4.知道下标,所以知道偏移量,就能够算出指定下表内存地址
所以数组是查找效率最高的数据结构
(数组中存储100个元素和100W个元素检索效率是相同的,数组中不会一个一个找,是通过数学表达式算出来然后直接定位)
·缺点:
1.由于为了保证每个元素的内存地址连续,所以在数组上随机删除或增加元素效率较低,因为会涉及到后面元素同一向前向后位移的操作。(对最后一个元素增删,没有效率影响)
2.数组不能存储大数据量,很难在内存空间上找到特别大的连续内存空间
声明一维数组语法:
int[] arrary1;
double[] arrary2;
boolean[] array3;
String[] array4;
Object[] array5;
初始化一维数组:
·静态初始化
int[] array={100,200,330}
·动态初始化一维数组:
int[] array= new int[5]; //5表示元素个数,默认值为0
第一个元素 a[0],最后一个元素a[a.length-1]
遍历一位数:
for(int i=0;i++;i
System.out.println(a[i]);
}
数组下标越界异常:ArrayIndexOutOfBoundsException
静态初始化:
Object o1=new Object();
Object o2=new Object();
Object o3=new Object();
Object[] objects={o1,o2,o3};
或者:Object[] objects={new Object(),new Object(),new Object()};
定义 输出数组:
public class Test {
public static void main(String[] args) {
int[] a={1,2,3};
print(a);
System.out.println("===================");
int[] b=new int[3];
print(b);
System.out.println("===================");
print(new int[3]);
print(new int[]{1,2,3});
}
public static void print(int[] array){
for(int i =0;i
数组的多态使用
public class Test {
public static void main(String[] args) {
Animal[] animals= new Animal[2];
Cat c= new Cat();
Bird b =new Bird();
animals[0]=c;
animals[1]=b;
for(int i=0;i< animals.length;i++){
animals[i].eat();
//调用子类中特有方法,需要向下转型
if(animals[i] instanceof Cat){
Cat cat=(Cat) animals[i];
cat.Climb();
}else if(animals[i] instanceof Bird){
Bird bird=(Bird) animals[i];
bird.fly();
}
}
System.out.println("1111");
}
}
class Animal{
public void eat(){
System.out.println("动物吃...");
}
}
class Bird extends Animal {
public void eat(){
System.out.println("鸟儿在吃虫子");
}
public void fly(){
System.out.println("鸟在飞");
}
}
class Cat extends Animal {
public void eat(){
System.out.println("猫在吃鱼");
}
public void Climb(){
System.out.println("猫在爬");
}
}
数组扩容
java中对数组的扩容:先新建一个大的数组,将小的数组一个一个拷贝到大的数组中,效率低。
System.arraycopy();
5个参数:1.源 2.源位置 3.目标 4.目标位置 5.拷贝长度
int[] src= {0,1,2};
int[] dest= new int[20];
System.arraycopy(src,1,dest,2,2);
for(int i=0;i< dest.length;i++){
System.out.println(dest[i]);
}
二维数组
二维数组是特殊的一维数组
int[][] a= {{100,200,300}{30,20,40,50,60}{6,7,9,1}{0}}
取出第二个数组中的第三个元素:a[1][2];
二维数组遍历:
for(int i=0;i
合并简化后代码:
for(int i=0;i
动态初始化二维数组
将一个变量塞到一个字符串当中,口诀:(加一个双引号,双引号中间加两个加号,两个加号中间加变量名。)
Arrays工具类
Arrays.sort(arr);
可以将数组arr从小到大排序。
工具类直接在idea中按两次Shift来查找 或使用帮助手册来开发
java.util.Arrays工具类
所有方法都是静态的,直接用类名调用
主要使用:二分法查找



