Java零基础入门数组
作者:Tangable22 发布时间:2023-05-21 00:09:16
认识数组
数组的定义
数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。
数组的四个基本特点
长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
其元素的类型必须是相同类型,不允许出现混合类型。
数组类型可以是任何数据类型,包括基本类型和引用类型。
数组有索引的:索引从0开始,到 数组
.length-1
结束数组变量属于引用类型,数组也是对象。
PS:数组变量属于引用类型,数组也是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存储的。
数组下标从0开始
arr[0] == 12
arr[1] == 6
arr[2] == 27
…
arr[5] == 43
数组的初始化
数组的初始化方式总共有三种:默认初始化、静态初始化、动态初始化。
默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
int[] arr = new int[3]; //数组有默认的初始化值
基本数据类型数组的默认值:
byte[] : 0
short[] : 0
cahr[] : ‘\u0000’
int[] : 0
long[] : 0
float[] : 0.0
double[] : 0.0
boolean[] : false
引用数据类型数组的默认值:null
静态初始化
除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。
int[] arr = {12,23,45};
int[] arr = new int[]{12,23,45};
动态初始化
数组定义与为数组元素分配空间并赋值的操作分开进行。
int[] arr ;
arr = new int[3]
arr[0] = 12;
arr[1] = 23;
arr[2] = 45;
数组有关的问题
数组的遍历
两种方法
public class TestCode04 {
public static void main(String[] args) {
int[] arr1 = new int[]{1, 2, 3, 4, 5};
int[] arr2 = {5, 4, 3, 2, 1};
//方式1,使用普通for循环
//arr1.length获取数组长度的方法
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i] + " ");
}
System.out.println();
//方式2,使用增强for循环
for (int a : arr2) {
System.out.print(a + " ");
}
}
}
求最值问题
问题:给定一个数组int[] arr = {3,5,6,17,26,9,0,7};
,求出数组中最大的数
public class TestCode05 {
public static void main(String[] args) {
int[] arr={3,5,6,17,26,9,0,7};
int max=arr[0];//假设最大元素为数组arr[0]位置上的数
//然后依次向后比较
for(int i=1;i<arr.length;i++){
//因为max=arr[0];可以从arr[1]位置开始比较
if(arr[i]>max){
max=arr[i];
}
}
System.out.println(max);
}
}
查询子元素
查询指定位置元素
给定一个数组,查询索引位置为2上的元素
public class TestCode06 {
public static void main(String[] args) {
int[] arr={3,5,6,17,26,9,0,7};
//直接输出arr[2];
System.out.println(arr[2]);
//输出-->6
}
}
上面代码体现了数组的一个优点:在按照位置查询的时候,直接一步到位,效率非常高
查询指定元素的位置–>找出元素对应的索引
public class TestCode07{
public static void main(String[] args){
//查询指定元素的位置-->找出元素对应的索引
//给定一个数组:
int[] arr = {12,34,56,7,3,56};
// 0 1 2 3 4 5
//功能:查询元素12对应的索引:
int index = -1; //这个初始值只要不是数组的索引即可
for(int i=0;i<arr.length;i++){
if(arr[i]==12){
index = i;//只要找到了元素,那么index就变成为i
break;//只要找到这个元素,循环就停止
}
}
if(index!=-1){
System.out.println("元素对应的索引:"+index);
}else{//index==-1
System.out.println("查无此数!");
}
}
}
Arrays工具类
为了方便我们对数组进行操作,系统提供一个类Arrays,我们将它当做工具类来使用。
下面通过代码演示Arrays类中常用的方法:
Arrays.toString(arr);//对数组进行遍历查看,返回的是一个字符串
Arrays.sort(arr);//对数组进行排序 -->升序
Arrays.copyOf(arr,index);//对数组的复制
Arrays.copyOfRange(arr,startindex,endindex);//区间复制
Arrays.equals(arr1,arr2);//比较两个数组的值是否一样
Arrays.fill(arr,1);//数组填充
import java.util.Arrays;
public class TestCode08{
public static void main(String[] args){
//给定一个数组:
int[] arr = {1,3,7,2,4,8};
//toString:对数组进行遍历查看的,返回的是一个字符串
System.out.println(Arrays.toString(arr));
//binarySearch:二分法查找:找出指定数组中的指定元素对应的索引:
//这个方法的使用前提:一定要查看的是一个有序的数组:
//sort:排序 -->升序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.binarySearch(arr,4));
int[] arr2 = {1,3,7,2,4,8};
//copyOf:完成数组的复制:
int[] newArr = Arrays.copyOf(arr2,4);
System.out.println(Arrays.toString(newArr));
//copyOfRange:区间复制:
int[] newArr2 = Arrays.copyOfRange(arr2,1,4);//[1,4)-->1,2,3位置
System.out.println(Arrays.toString(newArr2));
//equals:比较两个数组的值是否一样:
int[] arr3 = {1,3,7,2,4,8};
int[] arr4 = {1,3,7,2,4,8};
System.out.println(Arrays.equals(arr3,arr4));//true
System.out.println(arr3==arr4);//false ==比较左右两侧的值是否相等,比较的是左右的地址值,返回结果一定是false
//fill:数组的填充:
int[] arr5 = {1,3,7,2,4,8};
Arrays.fill(arr5,10);
System.out.println(Arrays.toString(arr5));
}
}
二维数组
本质上全部都是一维数组
二维数组初始方式
静态初始化
int[][] arr = {{1,2},{4,5,6},{4,5,6,7,8,9,9}};
int[][] arr =new int[][] {{1,2},{4,5,6},{4,5,6,7,8,9,9}};
动态初始化
int[][] arr = new int[3][]; //本质上定义了一维数组长度为3,每个“格子”中放入的是一个数组
arr[0] = new int[]{1,2};
arr[1] = new int[]{3,4,5,6};
arr[2] = new int[]{34,45,56};
默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
int[][] arr=new int[3][3];//定义一个3*3的二维数组,默认值为0
二维数组的遍历
两个for循环
for (int i = 0; i < arr.length; i++) {
for (int j = 0; i < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();//换行
}
}
来源:https://blog.csdn.net/weixin_47383392/article/details/124141586


猜你喜欢
- 前言使用maven创建的springboot项目,默认是jar包,springboot还有自己带的tomcat。现在需要将项目打包,并部署到
- 前面介绍了一些,基本的概念和需要具备的编程知识。下面开始来进行代码的编写,前面已经提到了最终的代码会是一个的http服务器的小demo&am
- WPF在样式定义和UI动画上面相对于以前的技术有了不少的提升,下面给出WPF技术实现钟表的效果:1、Visual Studio新建一个WPF
- 本文实例为大家分享了Struts2+uploadify多文件上传的具体代码,供大家参考,具体内容如下首先我这里使用的是 Jque
- application.properties有以下这几条数据方法一:@Value注解+@Component建议properties少的时候用
- idea spring Initializr创建项目勾选项目所需要的依赖pom.xml文件会加载勾选的依赖,也可以不勾选后面通过自己常用的p
- 示例我们先来以这样一个场景引入: 在电脑城装机总有这样的经历。我们到了店里,先会有一个销售人员来询问你希望装的机器是怎么样的配置,
- 一、引言使用原生的zookeeper时候会遇到watcher一次注册生效一次等情况,因此使用curatorcurator是Netflix公司
- 批量添加,批量更新之前判断是否已经存在批量添加之前判断是否已经存在,foreach separator用UNION ALL。批量
- 本文实例为大家分享了利用Swing绘制一个动态时钟的具体代码,供大家参考,具体内容如下效果代码在下面,可跳过解析。前言编程实现一个时钟利用S
- 在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如星期一到星期日七个数据元素组成了一
- 获取MCC/MNC以便控制小区广播的开启 双卡:((GeminiPhone)mPhone).getIccCardGemini(simId).
- 讲解之前需要说明的是旋转屏幕:在系统的自动旋转屏幕开启的情况下,我们旋转屏幕手动设置屏幕:我们自己去调用Activity的 setReque
- 本文实例为大家分享了java实现简易飞机大战的具体代码,供大家参考,具体内容如下整体思路1.创建游戏窗体,添加面板JPanel,重写JPan
- 介绍今天主要分享一下 kafka 的 rebalance,在 kafka 中,rebalance 是一个十分重要的概念,很多时候引发的一些问
- 消息队列1.消息队列的原理1.1 msgqueue采用链表来实现消息队列, 该链表是由系统内核维护,1.2 系统中可能有很多的msgqueu
- 线程池类图我们最常使用的Executors实现创建线程池使用线程主要是用上述类图中提供的类。在上边的类图中,包含了一个Executor框架,
- 进程之间的通信是为了解决不同进程之间的数据传输问题,这样可以让不同程序交互数据。实现进程通信的方式:1、剪切板;2、COM;3、内存映射文件
- 本文实例讲述了C++语言实现线性表之链表实现方法。分享给大家供大家参考。具体分析如下:插入、删除结点的代码有点多,但这样提高了代码的可读性,
- 由于今天用Security进行权限管理的时候出现了一些Bug,特此发这篇博客来补习一下对SpringSecurity的理解前言引入当今市面上