Java基础--数组

数组是具有相同数据类型的一组数据的集合,在Java中,虽然基本数据类型不是对象,但是由基本数据类型组成的数组却可以看成对象。数组作为对象允许使用new关键字进行内存分配,在使用数组前,必须首先定义数组的数据类型。

 

  • 数组的创建

 

数组分一维数组和二维数组;

 

一维数组

一维数组的创建有两种形式:第一种,先声明数组,再用new来进行内存分配;第二种,声明数组与内存分配同时进行。

 

先声明数组,再用new来进行内存分配

首先声明一维数组同样有两种方式:

数组元素类型 数组名称 [];

数组元素类型 [] 数组名称;

 

数组声明后还不可以使用,要在为数组分配内存,要注意,在为数组分配内存空间时要指明数组的长度。

数组名称 = new 数组的元素类型[数组元素的个数];

注意:在为数组分配内存时,整数型数组的各个元素的初始值为0.

 

声明数组的同时为数组分配内存空间

数组元素类型 数组名称 = new 数组元素类型[数组元素的个数];

 

数组与基本数据类型一样可以进行初始化操作,可以分别初始化数组中的每个元素。

数组初始化的方式也有两种:

例如:int arr[] = new int[]{1,2,3,4,5};

      Int arr[] = {3,5,7};

 

二维数组

二维数组就是数组中的每一个元素同样也是一个数组。二维数组通常用于表示表,表中信息以行列的形式组织,第一个下标代表元素所在的行,第二个下标代表元素所在的列。

 

创建二维数组的方式同样有两种:先声明数组再分配内存和声明的同时进行内存分配;

声明二维数组

数组元素类型 数组名称 [] [];

数组元素类型 [] [] 数组名称;

 

为数组分配内存

arr = new int[2][4];

 

声明数组的同时为其分配内存:

数组元素类型 [][] 数组名称 = new 数组元素类型[2][4];

 

二维数组的初始化

例如: int arr[][] = {{1,2},{3,4}}

 

 

二.数组的操作

数组可以通过Java.util 包中的Arrays类包含的方法来对数组进行操作。

 

  1. 遍历数组

遍历数组,获取数组中的元素,通常采用for循环和foreach语句的方式,二维数组则需要双重for循环;

例如:// 首先定义一个二维数组

int arr [][] = new int[][] {{1},{2,3},{4,5,6}};

 

// 采用双重for循环的方式遍历数组

for(int i=0;i<arr.length;i++) {

int[] arr1 = arr[i];

for(int j=0;j<arr1.length;j++) {

System.out.print(arr1[j]);

}

System.out.println();  // 换行

}

 

// 采用foreach语句遍历

// 定义一个外层循环计数变量

int a = 0;

for (int[] arr2 : arr) {

a++;

// 定义一个内层循环计数变量

int b=0;

for (int ar : arr2) {

b++;

//判断是否是数组中最后一个元素

if(a == arr.length && b == arr2.length) {

System.out.println(ar);

}else {

System.out.println(ar+",");

}

}

}

 

 

  1. 填充替换数组元素

数组元素定义后,可通过Arrays中方法fill(),对数组元素进行替换。

fill(int[] a,int value) 将指定的int值value分配给int型数组每个元素。

 

fill(int[] a, int fromIndex, int toIndex, int value) 该方法将指定的int值value分配给int型数组指定范围中的每个元素,填充的范围从索引fromIndex(包括该索引)一直到 toIndex(不包括该索引),如果 fromIndex == toIndex ,则填充范围为空。

 

注意:如果指定的索引大于或等于要填充的数组长度,则会报数组越界异常。

 

例如:// 首先定义一个数组

int arr[] = new int[5] ;

 

//1. 使用fill(int[] a,int value) 方法

Arrays.fill(arr, 8);

// 遍历数组

for (int i : arr) {

System.out.println(i);

}

 

//2. 使用fill(int[] a, int fromIndex, int toIndex, int value) 方法

 

//重新定义一个数组,并且初始化值

int[] arr2 = new int[] {23,45,64,25};

Arrays.fill(arr2, 0, 2, 44);

// 遍历数组

for (int i : arr2) {

System.out.println(i);

}

 

 

  1. 对数组进行排序

通过Arrays中的sort()方法,可以对数组的元素进行排序,另外当数组的数据类型是String类型,他的排序算法是根据字典编排顺序排序的,因此数字应当在字母前面,大写字母要在小写字母前面。

例如://定义一个数组,并且初始化值

   int[] arr3 = new int[] {23,45,64,25};

Arrays.sort(arr3);

// 遍历数组

for (int i : arr3) {

System.out.println(i);

}

  1. 复制数组

 Arrays类中的copyOf()和copyOfRange()方法可以实现对数组的复制。copyOf()方法是复制数组至指定长度;copyOfRange()方法是将指定数组的指定长度复制到一个新的数组。

copyOf()

语法: copyOf(arr,int newIndex);

       arr 表示要进行复制的数组;

       newIndex 表示复制后新数组的长度,如果新数组的长度大于数组arr的长度,则用0填充(根据复制数组的类型来决定填充的值,整数型数组用0填充,char型数组用null填充);如果复制后的数组长度小于数组arr的长度,则会从数组arr的第一个元素开始截取到满足新数组长度为止。

 

copyOfRange()

语法:copyOfRange(arr,int fromIndex, int toIndex);

      arr 表示要复制的数组;

      fromIndex 表示指定开始复制数组的索引位置,fromIndex必须在0至整个数组长度之间,新数组包括索引是fromIndex的元素。

      toIndex 表示指定复制数组范围的最后位置,可大于数组长度,新数组不包括索引toindex的元素。

 

例如:// 首先定义一个数组

int arr [] = new int[] {2,5,4,6,27,9,12};

 

// 使用copyOf方法

int[] newArr = Arrays.copyOf(arr, 3);

System.out.println("复制后的新数组newArr中的元素是:");

for (int i : newArr) {

System.out.print(i+",");

}

System.out.println();

// 使用copyOfRange()方法

int[] newArr1 =  Arrays.copyOfRange(arr, 2, 4);

System.out.println("复制后的新数组newArr1中的元素是:");

for (int i : newArr1) {

System.out.print(i+",");

}

 

 

  1. 数组查询

Arrays类中的binarySearch()方法,可以使用二分搜索法来搜索指定数组,以获取指定对象,该方法返回的是要搜索元素的索引值。

 

binarySearch(Object[] a, Object key)

如果key值包含在数组a中,则返回搜索值的索引,否则返回-1或者“-”插入点。插入点是搜索键要插入数组的那一点,即第一个大于此键的元素索引。

如果数组中所有的元素都小于指定的键,则为数组.length.

 

注意:必须在进行此调用方法之前,对数组进行排序,如果没有对数组进行排序,则结果是不确定,如果数组中包含多个带有指定值的元素,则无法保证找到的是哪一个。

 

binarySearch(Object[] a,int fromIndex,int toIndex,Object key)该方法在指定范围内搜索指定元素。如果要搜索的key,在指定的范围内,则返回该值的索引值,否则返回-1或“-”插入点。如果范围中所有的元素都小于指定的键,则为toIndex。如果指定的范围大于或等于数组长度,则会报越界异常。

 

例如:// 首先定义一个数组

int arr [] = new int[] {2,5,4,6,27,9,12};

 

//对数组使用sort方法排序

Arrays.sort(arr);

 

// binarySearch(Object[] a, Object key)

int index = Arrays.binarySearch(arr, 8);

System.out.println(index);

int index1 = Arrays.binarySearch(arr, 5);

System.out.println(index1);

 

// binarySearch(Object[] a,int fromIndex,int toIndex,Object key)

int index2 = Arrays.binarySearch(arr, 0, 3, 43);

System.out.println(index2);

int index3 = Arrays.binarySearch(arr, 0, 3, 4);

System.out.println(index3);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值