Java基础--数组

文章目录

  • 前言
  • 一、数组的定义
  • 二、数组封装类和方法的使用
    • 1.数组的复制
    • 2.Arrays类    //记得加s!
    • 3.foreach与数组
    • 4.一些题目分享
  • 总结


前言

本文将对java数组做详细介绍:包括一维二维数组的定义,封装类Arrays和数组封装方法做一点介绍,

最后介绍几道数组的编程题目的解法。

 


一、数组

一维数组


在Java中有两种数据:primitive类型和objects.

数组必须初始化后才可使用。

数组属于object类型,所以必须用new来创建数组,同时数组具备一下特性:

1. 数组创建之后就不能改变大小

2. 数组创建之后,若没有指定初始值,则依据数组类型的不同,会预设不同的初始值

  数组初始化方式:

 1、静态初始化:Int[] arr1= new int[]{1,2,3,4,5};或int[] arr1={1,2,3,4,5};

 2、动态初始化:Int[] arr1=new int[5];  // 创建一个可容纳5个元素的数组 

3. 数组有一个length属性,可以取回数组中元素的个数

 

二维数组

二维数组用数组“名称”与“两个索引”来指定存取数组中的元素。

其定义方式与一维数组类似:

 1、静态初始化:int[][] arr1= {{1,2,3}, {4,5,6}};

 2、动态初始化:int[][] arr1=new int[3][3];

注意length所代表的长度,数组名后直接加上length(如arr.length),所指的是数组有几行; 指定索引后加上length(如arr[0].length),指的是该行拥有的元素,也就是列的数目。

值得注意的是,数组的游标是从0 开始的,比如一位数组的第一个元素:arr1[0]=1; arr[4]=5;

二位数组中:arr2[0][0]=1;  arr2[2][2]=6;
 

二、数组封装类和方法的使用

1.数组的复制 

1). 使用System.arraycopy()方法,可以赋值一个数组的部分值到另一个数组

   System.arraycopy(来源,起始索引,目的,起始索引,复制长度);

   例如:

   int[]arr1 = {1,2,3,4,5};

   int[]arr2 = new int[5];

  System.arraycopy(arr1, 0, arr2, 0, arr1.length);//之后数组2的值等于数组1的值

2). 在Java SE 6中,Arrays类新增了copyOf()方法,可以直接返回一个新的数组对象,而其中包括复制的内容

   例如:

   import  java.util.Arrays;

   int[]arr1 = {1,2,3,4,5};

   int[]arr2 = Arrays.copyOf(arr1,arr1.length);

   Arrays的copyOf()方法返回的数组是新的数组对象,所以改变返回数组中元素的值不会影响原来数组中元素的值。copyOf()方法中第二个变量指定新数组的长度,如果新数组的长度超过原来数组的长度,则多出来的元素会保留数组默认值。

   除了copyOf()方法外,还有copyOfRange()方法,可以指定来源数组以及要复制的索引范围:

   int arr1= {1,2,3,4,5};

   intarr2 = Array.copyOfRange(arr1,1,4);  // 复制索引1开始到索引4(但不包括索引4)的元素,arr2的元素会是2,3,4

2.Arrays类

Array类位于java.util包中,它提供了几个方法可以直接使用:

sort() - 对指定数组排序,作用是快速排序法

使用方法:用一个例子就可以说清楚:int[] arr={1,4,6,3,9,7};

使用类里面的方法:Arrays.sort(arr);之后数组的值会从小到大排列 arr={1,3,4,7,9};

binarySearch() - 让你对已排序的数组进行二分查找,如果找到指定的值就返回该值所在的索引,否则就返回负值

使用方法介绍:也是用上面一个数组来说:intnum=Arrays.binarySearch(arr,6);那么num=2

需要注意的是:括号里面有两个参数:第一个是数组名称,第二个是要在数组中查找的元素,

如果数组中没有这个元素就返回一个负数,否则返回的值是数组元素游标的值

fill() - Arrays.fill()将已创建数组的默认值改为指定值

使用:Arrays.fill(arr,3);使用后arr数组里面的全部值都变成3了

Arrays.equals() - 比较两个数组中的元素值是否全相等,如果相等返回true,否则返回false

 boolean b=Arrays.equals(arr1,arr2);

Arrays.toString()- 可以一次输出数组的元素,每个元素之间用逗号相隔

System.out.println(Arrays.toString(arr));

Arrays类里面还有很多其他的封装的方法,如果有兴趣的话可以查看相关文档或浏览API;

3.foreach与数组

在Java SE 中, foreach的语法为:

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

for(int  i : arr){

System.out.println(element);

}

    结果将会依次输出数组arr里面的值

注意, i  类型必须与数组元素类型相同
 

4.一些题目分享

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

程序分析:创建一个五位数数的数组,把输入数字的每位数的值赋值到数组里面  

      * 把输入 数字从个位起获取,并且每获取一次之后/10,这样就能分别获取十位百位千位了

      * 把数字打印出来就是题目所求了 
 

代码演示:

运行结果:


程序示例2

题目:打印出杨辉三角形(要求打印出10行如下图)

程序分析:

    1

   1 1

  1 2 1

 1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1、二维数组的使用

2、第一列的数都是1

3、使用两个for循环,i控制行,j控制列;

从第二行第二列起arr[i][j]=arr[i-1][j-1]+arr[i-1][j]
 

代码演示:

 

 

 

 

 

总结

数组区别于其他容器的特性有三个:高效率,可以精确持有类型信息,可以持有基本类型。数组是Java中用来持有和访问对象最高效的方式,没有之一。数组的存储方式是简单的线性序列,这是导致其能告诉访问的根本原因。大家可能会想ArrayList不是和数组的特性非常相似么,为什么不使用ArrayList来代替Array。况且ArrayList还提供了更多的方法,并且可以动态的更改容器大小以适应元素的增加。那么我只能说,他提供这些额外的功能都有一定的开销的(别的不说,get这种使用Object类型参数的方法,向上转型是不是要开销?)。在我们追求极限效率的情况下,使用数组是一种更好的选择。 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值