Java SE - 数组
目录
- 1.数组的创建和初始化
- 2.数组的遍历
- 3.数组的使用
- 3.1 将字符串逆序
- 3.2 二分查找
- 3.3 冒泡排序
- 4.数组是引用类型
- 5.二维数组的使用
1.数组的创建和初始化
public class Main{public static void main(String[] args) {//1.数组的创建:类型 + 数组名// new是一个关键字,表示在堆区开辟一块新的空间int[] array1 = new int[2];char[] array2 = new char[6];float[] array3 = new float[5];//2.创建的同时初始化int[] array4 = new int[10];//默认为0char[] array5 = {'a','b','c','d','e','f'};}}
2.数组的遍历
public class Main{public static void main(String[] args) {int[] arrays = new int[10];//使用for循环初始化:1 - 10for (int i = 0;i < arrays.length;i++){arrays[i] = i + 1;}//遍历数组:输出1-10for (int j = 0;j<arrays.length;j++){System.out.print(arrays[j] + " ");}System.out.println();//换行System.out.println("--------------------");//使用for-each:将arrays数组的值赋给x后输出for (int x: arrays) {System.out.print(x + " ");}}}
程序输出结果如下:
3.数组的使用
3.1 将字符串逆序
import java.util.Arrays;public class Main{public static void reverse(char[] chars){//通过下标的方式进行访问int left = 0;//左下标int right = chars.length - 1;//有下标while(left < right){char tem = chars[left];chars[left] = chars[right];chars[right] = tem;left++;right--;}}public static void main(String[] args) {char[] chars = {'a','b','c','d','e','f'};reverse(chars);System.out.println(Arrays.toString(chars));}
}
Arrays是一个类,其中包含多种方法,以上调用的是toString重载的方法,参数类型是char[]。
3.2 二分查找
public class Main{//二分查找public static int BinarySort(int[] arrays,int t){int left = 0;//左下标int right = arrays.length - 1;//右下标while(left < right){int mid = (left + right)/2;//中间元素下标//中间元素小于目标元素,说明查找元素在右边if(arrays[mid] < t){left = mid + 1;//查找元素在左边}else if( arrays[mid] > t){right = mid - 1;}else{return mid;//找到返回下标}}return -1;//找不到返回-1}public static void main(String[] args) {int[] arrays = {1,2,3,4,5,6,7,8,9,10};int target = 5;int r = BinarySort(arrays,target);if(r == -1){System.out.println("找不到查找的元素....");}else{System.out.println("找到了,下标为:" + r);}}
}
3.3 冒泡排序
public class Main{//冒泡排序public static void BubbleSort(int[] arrays){for (int i = 0; i < arrays.length - 1; i++) {for (int j = 0; j < arrays.length -1 - i; j++) {//比较if(arrays[j] > arrays[j+1]){int tem = arrays[j];arrays[j] = arrays[j+1];arrays[j+1] = tem;}}}}public static void main(String[] args) {int[] arrays = {10,9,8,7,6,5,4,3,2,1};//使用冒泡排序改为升序BubbleSort(arrays);//排序后输出for (int x : arrays){System.out.print(x + " ");}}}
以上排序可以使用Array这一个类实现快速排序
public class Main{public static void main(String[] args) {int[] arrays = {10,9,8,7,6,5,4,3,2,1};Arrays.sort(arrays);//调用Arrays的sort方法//排序后输出for (int x : arrays){System.out.print(x + " ");}}
}
Arrays这一个类的方法可以查询以下链接:Arrays中的方法
4.数组是引用类型
JVM区域的划分
方法区用于存放虚拟机加载的类信息,静态变量,常量等数据,方法编译后的字节码文件存储该区域
堆区用于存放new关键字创建的对象,程序运行时开始使用,程序退出时释放;
虚拟机栈用于存放方法调用时开辟的栈帧,方法调用结束栈帧销毁;
本地方法栈与虚拟机栈的功能类似,本地方法栈存放的是native修饰的方法;
程序计算器用于存放下一条指令的地址。
创建一个数组时,使用new关键字开辟的空间是在堆区上的,此时数组名相当于一个引用,存放开辟空间的地址。
public class Main{public static void main(String[] args) {//arrays是一个引用int[] arrays = new int[10];}}
引用的作用是通过引用可以找到引用所指向的对象,访问对象中的成员变量。
public class Main{public static void main(String[] args) {//arrays是一个引用int[] arrays = new int[10];//通过下标的方式可以找到引用指向的对象arrays[0] = 1;arrays[1] = 2;arrays[2] = 3;//输出System.out.println(arrays[0]);System.out.println(arrays[1]);System.out.println(arrays[2]);}}
同类型的引用可以将引用进行赋值,时引用同时指向一块空间。
public class Main{public static void main(String[] args) {//arrays是一个引用int[] array = new int[3];//通过下标的方式可以找到引用指向的对象array[0] = 6;array[1] = 6;array[2] = 6;//将array这个引用赋值给arrays这个引用int[] array1 = array;//使用arrays1访问到成员与array是一致的System.out.println(array1[0]);System.out.println(array1[1]);System.out.println(array1[2]);}}
5.二维数组的使用
public class Main{//二维数组的使用public static void main(String[] args) {//创建数组int[][] arrays = new int[2][3];//初始化数组for (int i = 0;i < arrays.length;i++){for (int j = 0; j < arrays[i].length; j++) {arrays[i][j] = i + j;}}//遍历数组for (int[] tem : arrays){//将arrays引用赋给rowfor (int n : tem) {//将tem指向的成员赋给nSystem.out.print(n + " ");//输出n}System.out.println();}}
}
二维数组创建时行号不可省略,列可以省略,利用此特性可以创建不规则的二维数组。
public class Main{//不规则二维数组public static void main(String[] args) {int[][] arrays = new int[2][];//行为2,列创建时可以省略arrays[0] = new int[1];//第一行有1个元素arrays[1] = new int[3];//第二行有3个元素//初始化arrays[0][0] = 1;for (int i = 1; i <= arrays[1].length; i++) {arrays[1][i-1] = i + 1;}//输出for (int[] tem : arrays){for (int n : tem){System.out.print(n + " ");}System.out.println();}}}