栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习——数组

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习——数组

CSDN话题挑战赛第1期
活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f
参赛话题:Java学习记录
话题描述:可以记录一下平时学习Java中的一些知识点、心得、例题、常见的问题解决


目录

一. 数组知识点

1.1 数组的定义方法

1.2 数组的初始化

1.3 数组中的元素

二. 用题目来掌握数组

2.1 初始化一个二维数组:

2.2 五种方法复制一个整形数组

1)使用赋值运算符“=”对基本类型的数据进行复制:

2)使用循环语句将一个数组的内容拷贝到另一个数组中:

3)使用数组的clone( )方法:

4)应用System.arraycopy( )方法:

5)应用Arrays.copyOf( )方法:

2.3 数组中的length( )属性

三. java基础技巧专栏


一. 数组知识点

        数组是高级语言中常见的一种数据结构。

        数组的本质是一个顺序存储的线性表,可用于存储多个数据,每个数据被称为一个数组元素。通常可以通过数组的小标来访问数组元素。

        在Java中数组里面的每个数据都必须是相同的数据类型。而且一旦数组被初始化后,其在内存中的长度就是固定的,不可以改变。

        在Java中,数组类型也是一种引用类型,定义一个数组变量相当于定义一个指针变量,数组的初始化要用new操作符在系统的堆内存中创建一个数组类型。也只有初始化了一个数组,该数组才能被使用。

1.1 数组的定义方法
//第一种格式
type[] arrayName;
//第二种格式
type arrayName[];

        注意这里只是定义了一个引用变量arrayName,其本质还是一个指针,但该数组并不存在也不能使用,所以在定义数组时不能指定数组的长度。

        要使用这个数组,还需要对数组进行初始化。

        注:在定义数组时,方括号[ ]中不能填写任何数字;

1.2 数组的初始化

Java中初始化数组有两种方法:静态初始化数组和动态初始化数组;

1)静态初始化数组:

        静态初始化数组是定义数组时显式地指定每个数组元素的初始值,系统会根据初始值的个数和类型来决定数组的大小。

代码举例1:

int[] arrayName;                    //定义一个数组
arrayName = new int[] {1,2,3,4,5,6};//数组的初始化

代码举例2:数组定义和数组的初始化可以同时完成

int[] arrayName = {1,2,3,4,5,6};//数组定义和数组的初始化同时完成

        这样系统会在堆内存中分配6个int类型长度大小的内存空间,并初始化数组元素为1、2、3、4、5、6。

2)动态初始化数组:

        动态初始化数组是指仅仅指定数组的长度,不需要指定数组元素的初始值。

 代码举例1:

int[] arrayName;       //定义一个数组
arrayName = new int[6];//动态初始化数组,指定数组的长度

代码举例2:数组定义和数组的初始化可以同时完成

int[] arrayName = new int[6];//数组定义和数组的初始化同时完成
        这样系统会在堆内存上为数组arrayName分配6个int类型长度大小的内存空间。需要注意的是,动态初始化数组由于不指定数组元素的初始值,所以系统将负责为这些元素分配初始值。

3)分配数组元素初始值的规则:

  • byte、short、int、long元素初始值为0;
  • float、double元素初始值为0.0;
  • char元素初始值为‘u0000’;
  • boolean元素初始值为false;
  • 引用类型(各种自定义类型、数组等)初始化为null;

        综上所述,如果只定义一个数组arrayName,而不去初始化它,则arrayName只是一个引用变量,也就是一个指针,它的值为null,不指向任何空间。只有初始化后,它才会指向一段堆内存空间。

1.3 数组中的元素
  • 如果数组中的元素是基本数据类型,可以直接把数据存储到堆内存中分配的数组空间里,此时堆内存中开辟的数组空间里面存放的就是数组元素;
  • 如果数组中元素为引用类型,如Object、String,或者其他自定义的类型等,这种情况下每个数据元素空间中存放的就是一个引用变量,它相当于一个指针,指向该变量真正存放的堆内存空间。此时堆内存中开辟的数组空间中存放的只是字符串的引用(指针),字符串本身存放在堆内存中的其他地址。

二. 用题目来掌握数组

2.1 初始化一个二维数组:

        Java中初始化二维数组的方法和初始化以为数组一样有两种:静态初始化数组和动态初始化数组;

1)定义二维数组:

注:在定义二维数组时,方括号[ ]中不能填写任何数字;

        二维数组有三种定义方法:

//第一种格式
type[][] arrayName;
//第二种格式
type arrayName[][];
//第三种格式
type[] arrayName[];

2)静态初始化数组:

        静态初始化二维数组是定义该二维数组时显式地指定每个数组元素的初始值,系统会根据初始值的个数和类型来决定数组的大小。

代码举例1:

int[][] arrayName;                                    //定义一个数组
arrayName = new int[][] {{1,2,3,4,5,6},{7,8,9,10,11}};//数组的初始化

代码举例2:数组定义和数组的初始化可以同时完成

//数组定义和数组的初始化同时完成
int[][] arrayName = {{1,2,3,4,5,6},{7,8,9,10,11}};

3)动态初始化数组:

        动态初始化数组是指仅仅指定数组的长度,不需要指定数组元素的初始值。

 代码举例1:

int[][] arrayName;        //定义一个数组
arrayName = new int[6][3];//动态初始化数组,指定数组的长度

代码举例2:数组定义和数组的初始化可以同时完成

int[][] arrayName = new int[6][3];//数组定义和数组的初始化同时完成
        动态初始化二维数组也会由于不指定数组元素的初始值,所以系统将负责为这些元素分配初始值。分配数组元素初始值的规则如上。

3)数组每行的列数可不同: 

        还有一点需要注意,与C++不同,Java中的二维数组第二个维度的长度可以不同,因此更加的灵活;如:

代码举例1: 

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

 代码举例2:

int[][] arrayName = new int[2][];
arrayName[0] = new int[]{1,2};
arrayName[1] = new int[]{3,4,5};

2.2 五种方法复制一个整形数组

1)使用赋值运算符“=”对基本类型的数据进行复制:
int[] a = new int[3];
int[] b = a;

        此时变量a和b其实都指向同一个数组,而没有是想我们想要的增加一份数组;

        因为使用“=”只能将一个数组的引用传递给拎一个数组变量;

2)使用循环语句将一个数组的内容拷贝到另一个数组中:
int[] src = {1,2,3,4,5,6};
int[] dest = new int[6];
for(int i=0;i<6;i++){
    dest[i] = src[i];
}

        这样就可以将数组输入层的内容复制到数组dest中,使得数组dest与src的内容是完全一样的;

3)使用数组的clone( )方法:

        由于Java中的引用类型不能通过简单的复制来解决对象复制对象复制的问题,所以很多情况下可以采用clone()方法来复制对象。

public class Text {
    public static void main(String[] args) {
        int[] array1 = {1,2,3,4,5,6};
        int[] array2;
        array2 = array1.clone();
        array1[0] = 100;
        for(int i=0;i

        通过调用array1的clone方法复制出array2,再修改array1的第一个元素1改成100,最后的输出结果可以验证出两个数组已经不是同一个数组;

4)应用System.arraycopy( )方法:

        System.arraycopy(Object src, int scrPos,Object dest,int destPos,int length):

  • src:源数组;
  • scrPos:源数组中的起始位置;
  • dest:目标数组;
  • destPos:目标数据额起始位置;
  • length:要复制的数组元素的数量;
public class Text {
    public static void main(String[] args) {
        int[] array1 = {1,2,3,4,5,6};
        int[] array2 = new int[5];
        System.arraycopy(array1,0,array2,0,5);
        array1[0] = 100;
        for(int i=0;i

        需要注意的一点是,数组array2必须初始化,否则程序编译时会报出“未初始化array2”的错误。 

5)应用Arrays.copyOf( )方法:

        Arrays.copyOf( )方法内部使用System.arraycopy( )方法实现的,只是在进行数组的复制时不需要初始化目的数组,该函数会在堆上创建一个新的数组并返回。

import java.util.Arrays;
public class Text {
    public static void main(String[] args) {
        int[] array1 = {1,2,3,4,5,6};
        int[] array2;
        array2 = Arrays.copyOf(array1,5);
        array1[0] = 100;
        for(int i=0;i

2.3 数组中的length( )属性

        数组没有length( )这个方法,但有length属性。可以通过length属性获得到一个数组的长度(无论该数组是否已被赋值)。

public class Text {
    public static void main(String[] args) {
        int[] array1 = new int[]{1,2,3,4,5,6};
        System.out.println(array1.length);//结果为6
    }
}

        扩展知识:String类中没有length的属性,但有length( )这个方法,其目的也是获取字符串的长度;


三. java基础技巧专栏

https://blog.csdn.net/weixin_53919192/category_11805605.html?spm=1001.2014.3001.5482https://blog.csdn.net/weixin_53919192/category_11805605.html?spm=1001.2014.3001.5482


CSDN话题挑战赛第1期
活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873526.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号