文章目录
一、java中数据类型
基本数据类型 byte short int long float double char boolean
引用类型 数组 String
二、数组
1、静态创建
数组在创建的时候内部已经有初始值了
语法
数据类型[] 数组名={}
数据类型[] 数组名=new 数据类型[]{}
数组中数据类型相似或相近
int chinese[] = {99,88,99};
int people[]=new int[]{22,33,44};//用的不多
静态数组能盛放多少要看内存有多大
2、动态创建
当数组创建时我们还不确定里面存的到底是什么,仅仅知道数据的个数
语法
数据类型[] 标识符 = new 数据类型[数组的长度]
int[] bb = new int[10];
3、数组的内存特征
栈内存:主要用于执行方法 存储量相对较小 临时的 工厂的生产车间
堆内存:用于存储大量数据 存储量相对较大 持久的 工厂的原料仓库
在这里数组在堆中存放的其实是数组在栈中的地址
数组一旦创建 他的长度是不可变的
数组存储数据增加和修改数据是比较麻烦的,但是根据索引查询数据是非常快的数组根据索引查询数据的方式是计算得来的,目标元素的地址=首元素地址+索引*数据长度,通过较少的次数的运算就可以快速定位元素,即使数组元素非常多
4、数组的遍历方式
使用for循环
int chinese[] = {99,88,99};
for (int i = 0; i < chinese.length; i++) {
System.out.println(chinese[i]);
}
增强型for循环 简化for循环(for each)
他会设置一个临时变量,每循环一次,就将数组中从第i个元素赋值(不是原数组值给那个临时变量。
没有办法通过中间变量修改数组元素
当不需要使用数组索引也不需要修改数组元素值首选foreach
for (int a:chinese) {
System.out.println(a);
}
三、数组的应用
1、数组的合并
//将两个数组合并到一起
int[] a={1,2,3,4,5,6};
int[] b={11,22,33,44};
/*数组一旦创建,长度是不可以变的*/
int[] c=new int[a.length+b.length];
/*将a数组中的元素放入c数组中*/
for (int i = 0; i < a.length; i++) {
c[i]=a[i];
}
for (int x:c) {
//动态创建数组是虚拟机自动给数组初始化,会根据数组类型初始化不同值
/*
* byte int long short ---》0
* float double---》0.0
* char ---》' '
* Boolean---》false
* */
System.out.print(x);
}
/*将b数组中的元素放入c数组中*/
for (int i = 0; i < b.length; i++) {
c[i+a.length]=b[i];
}
for (int x:c) {
System.out.print(x+",");
}
2、数组的扩容
//数组的扩容 追加一个元素
int[] a={1,2,3,4,5};
int[] b=new int[a.length+1];
for (int i = 0; i < a.length; i++) {
b[i]=a[i];
}
b[b.length-1]=6;
for (int x:b) {
System.out.print(x+",");//1,2,3,4,5,6,
}
a=b;
//将b对于堆内存的引用(地址)赋值给a
//他的标识符里存的就是数组的地址,即引用;所以赋值也是赋值的引用
3、插入一个元素
创建新数组
4、数组的缩容(删除元素)
第一种方法(需要创建新数组)
int[] arr ={1,2,3,4,5};
int[] newArr=new int[arr.length-1];
//删除索引为3(4)的元素
for (int i = 0; i < 3; i++) {
newArr[i]=arr[i];
}
for (int i = 4; i < arr.length; i++) {
newArr[i-1]=arr[i];
}
for (int x:newArr) {
System.out.print(x);
}
第二种方法(不需要创建新数组)
for (int i = 4; i < arr.length; i++) {
arr[i-1]=arr[i];
}
arr[arr.length-1]=0;
for (int x:arr) {
System.out.println(x);
}
四、工具类Array的应用
排序
//1.排序功能
Arrays.sort(arr1);
for (int x:arr1) {
System.out.print(x+",");//1,2,3,4,4,5,6,8,
}
System.out.println();
查找下标
二分法查找binarySearch,所以要升序排序
//2.在数组中快速的查询给定元素出现的位置
int index=Arrays.binarySearch(arr1,4);
System.out.println(index);//3
/*如果找到元素返回元素索引 如果没找到返回一个负数
* binarySearch在使用时必须先给数组按升序排序
* */
int index2=Arrays.binarySearch(arr1,99);
System.out.println(index2);//-9
转换成字符串
//3.字符串输出
String s = Arrays.toString(arr1);
System.out.println(s);//[1, 2, 3, 4, 4, 5, 6, 8]
数组复制
1.获取数组副本
//4.数组复制
//获取数组副本
//arr1 {1,2,3,4,5,6}
int[] arr2=Arrays.copyOf(arr1,4);
for (int x:arr2) {
System.out.print(x+" ");
}
2.也是获取数组副本
使用System.arraycopy
//5.获取副本
int[] arr3 = {1,2,3,4,5,6,7,8,9};
int[] newArr3 = new int[10];
//从arr3的下标为4元素起,往后数4元素,复制到newArr3从下标为3起的位置
System.arraycopy(arr3,4,newArr3,3,4);
for (int x:newArr3) {
System.out.print(x+"-");//0-0-0-5-6-7-8-0-0-0-
}