《java从入门到精通》个人笔记-第六章 数组

本文深入讲解Java中一维数组和二维数组的创建、初始化、基本操作及常用算法,包括数组的遍历、填充、排序、复制和查询。探讨了数组排序算法如冒泡排序、直接选择排序,并详细解析了binarySearch()方法的使用方法。

第六章

  1. 一维数组:实质上是一组相同类型数据的线性集合。
    创建一维数组的方式
    (1) 先声明,再用new运算符进行内存分配
    (2) 声明的同时为数组分配内存
    使用new关键字分配内存时,必须指定数组元素的类型和数组元素的个数,整型数组无论一维二维中,各个元素的初始值都为0,)
    初始化一维数组的方式:即包括在大括号之内用逗号分开的表达式列表。
    int arr[] = new int[]{1,2,3,5,25};
    int arr2[] = {34,23,12,6};

  2. 二维数组:一维数组中的各个元素仍然是一个数组,那么它就是一个二维数组。
    创建二维数组的方式
    (1) 先声明,再用new运算符进行内存分配
    (对于高维数组有两种分配内存方式:1.为每一维数组分配,a = new int[2][4];2.分别为每一维分配,a = new int[2][]; a[0] = new int[2]; a[1] = new int[3];)
    (2) 声明的同时为数组分配内存
    初始化二维数组的方式:type arrayname[][] = {value1, value2……valuen};

  3. 数组的基本操作:java.util包的Array类包含了用来操作数组的各种方法。
    遍历数组:通常使用for循环来实现。也可以用foreach实现。
    填充替换数组元素:Arrays类的静态方法fill()通过各种重载形式可对任意类型数组元素替换。
    (1) fill(int[] a, int value)将指定的int值分配给int型数组的每个元素。
    (2) fill(int[] a, int fromIndex, int toIndex, int value)将指定的值分配给指定范围内每个元素。(如果指定的索引位置大于或等于要进行填充的数组的长度,则会报错。)包括formIndex和toIndex的元素。
    对数组进行排序:sort()方法提供多种重载形式,可对任意类型的数组进行升序排序。
    语法:Arrays.sort(object) object指进行排序的数组名称。
    复制数组:copyOf()方法和copyOfRange()方法。
    CopyOf()方法:复制数组至指定长度。语法:copyOf(arr, int newlength) newlength指复制后新数组的长度,若新数组的长度大于原来的,则根据数据类型填充,整形数组用0,char型数组用null。
    copyOfRange()方法:将指定数组的指定长度复制到一个新数组中。语法:copyOfRange(arr, int formIndex, int toIndex) formIndex必须在0至整个数组的长度之间,新数组包括formIndex的元素,toIndex可大于数组长度,新数组不包括索引是toIndex的元素。
    数组查询:binarySearch()方法,可使用二分搜索法来搜索指定数组。(必须在进行此调用之前对数组进行sort()排序,否则结果是不确定的。)
    (1) binarySearch(Object[] a, Object key) a要搜索的数组,key要搜索的值。如果key包含在数组中,返回索引的值,否则返回-1或 “ - 插入点“ 。插入点是搜索键将要插入数组的那一点,即第一个大于此键的元素索引。
    (2) binarySearch(Object[] a, int formIndex, int toIndex, Object key) 如果范围中所有元素都小于指定的键,则返回toIndex。这里包括formIndex和toIndex的元素。
    在这里插入图片描述

  4. 数组排序算法:冒泡排序、直接选择排序和反转排序。
    冒泡排序:对比相邻的值,满足条件就交换,这样较小的元素就像气泡一样从底部升到顶部。由双层循环实现,外层循环控制排序轮数,一般为要排序数组长度减1,内层循环对比数组中每个邻近元素的大小。
    在这里插入图片描述
    直接选择排序:将指定排序位置与其他数组元素分别对比。每一趟从待排序的数据元素中选出最小或最大的一个元素,顺序的放在已排好序的数列的最后,直到全部排完。
    在这里插入图片描述
    反转排序:以相反的顺序把原有数组的内容重新排序。把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推。只需循环数组长度的半数次。
    在这里插入图片描述

提出问题:java的binarySearch()方法如何使用?
1.如果找到关键字,则返回值为关键字在数组中的位置索引,且索引从0开始
2.如果没有找到关键字,返回值为负的插入点值,而且这个位置索引从1开始
(1)没有找到关键字时,关键字比数组中所有元素,则结果为-1‘
(2)没有找到关键字时,关键字比数组中所有元素,则结果为-(length+1)。
(3)没有找到关键字时,关键字在数组中有大有小,找到排序后第一个比关键字大的元素,结果为“-其索引“。
注意:调用binarySearch()方法前要先调用sort方法对数组进行排序,否则得出的返回值不定,这时二分搜索算法决定的。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值