当前位置: 首页 > news >正文

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();}}}

在这里插入图片描述
在这里插入图片描述

http://www.xdnf.cn/news/966097.html

相关文章:

  • A 找倍数 (线段树)
  • 凤凰双展翅之七七一五八九五隔位六二五
  • LeetCode 146.LRU缓存
  • Web应用压力测试详解
  • 力扣LFU460
  • FR4 中的色散如何真正影响传播延迟?
  • VSCode主题设计大赛
  • Deepin 25 安装字体
  • 若依使用RedisCache需要注意的事项
  • idea大量爆红问题解决
  • OpenGL学习20250610
  • Docker重启流程解析
  • MySQL中的CONVERT_TZ() 函数
  • C++ 智能指针实现原理
  • [一生一芯] 如何基于iSTA 分析时序
  • 3-存储系统
  • 【OpenCV】双相机结构光成像与图像交叉融合实现【C++篇】
  • 【Qt】Qt生成的exe依赖库与打包
  • 一天时间解决期末不挂科
  • 人工智能增强入侵检测系统以对抗高级持续性杀伤链
  • CTF show Web 红包题第六弹
  • 条件概率:AI大模型概率统计的基石
  • 第二讲 认识变量及数学运算符
  • 《广度优先搜索》题集
  • 一个n8n构建的能和LLM对话的Agent
  • mybatics
  • LCS4110R安全芯片防抄板原理
  • 黑马python(三)
  • 手写muduo网络库(三):事件分发器(Poller,EPollPoller实现)
  • java复习 07