一、数组的基本操作

  1、数组遍历【重点】

    数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。

     方式一:使用索引下标方式

  1. int[] array = { 15, 25, 30, 40, 50, 60, 75 };
  2. System.out.println(array[0]); //
  3. System.out.println(array[1]); //
  4. System.out.println(array[2]); //
  5. System.out.println(array[3]); //
  6. System.out.println(array[4]); //
  7. System.out.println(array[5]); //

    这种方式需要依次根据索引进行频繁重复的操作,不推荐使用,只做了解。

       方式二:使用 for 循环

  1. for (int i = 0; i < array.length; i++) {
  2. System.out.println(array[i]);
  3. }

    对于一个数组,每次对每个元素的操作都是相同的,用循环是最好的方法。而且就算数组的长度发送了改变代码也不需要改动。

    方式三:使用 foreach 循环

  1. for (int i: array){
  2.   System.out.println(array[i]);
  3. }

     这种循环是增强形式的 for 循环,其中 i 即代表数组中的每一个元素。

  2、数组获取最值元素

    获取数组中最值的步骤:

      •  定义变量,保存数组0索引上的元素;
      • 遍历数组,获取数组中的每个元素;
      • 将遍历到的元素和保存数组 0 索引上值的变量进行比较;
      • 如果数组元素的值大于(小于)变量的值,变量记录新的值;
      • 数组循环遍历结束,变量保存的就是数组中的最大值(最小值);

    代码实现:

  1. int[] arr = { 5, 15, 2000, 10000, 100, 4000 };
  2.  
  3. //定义最大值和最小值变量,保存数组中0索引的元素
  4. int min = arr[0];
  5. int max = arr[0];
  6. //遍历数组,取出每个元素
  7. for (int i = 0; i < arr.length; i++) {
  8. //遍历到的元素和变量max,min比较
  9. //如果数组元素大于max
  10. if (arr[i] > max) {
  11. //max记录住大值
  12. max = arr[i];
  13. }
  14. //如果数组元素小于min
  15. if(arr[i] < min) {
  16. //min记录住小值
  17. min = arr[i];
  18. }
  19. }
  20. System.out.println("数组最大值是: " + max);
  21. System.out.println("数组最小值是: " + min);

  3、数组越界异常

    创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引。

    程序运行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常。

    Demo:

  1. public static void main(String[] args) {
  2.   int[] arr = {1,2,3};
  3.   System.out.println(arr[3]);
  4. }

     程序运行结果:

  4、数组空指针异常

    如果只是声明了一个数组,并没有给它在内存中分配内存地址,运行的时候会抛出 NullPointerException 空指针异常。

    Demo:

  1. public static void main(String[] args) {
  2.   int[] arr = {1,2,3};
  3.   arr = null;
  4.   System.out.println(arr[0]);

     程序运行结果:

  5、填充替换数组元素

    数组完成声明后,可以通过 Arrays 类的静态方法 fill() 来对数组中的元素进行替换。该方法通过各种重载形式可完成对任意类型的数组元素的替换。下面是两种参数类型

    方式一:

      语法格式

  1. fill(int[] array,int value)

        该方法可将指定的 int 值分配给 int 型数组的每个元素。

      •  array:要进行元素替换的数组;
      • value:要存储数组中所有元素的值;

    Demo:

  1. public static void main(String[] args) {
  2. int[] array = new int[5];
  3. Arrays.fill(array,8);
  4. for (int i:array) {
  5. System.out.println(i);
  6. }
  7.  
  8. }

    方式二:

      语法格式:

  1. fill(int[] array,int fromindex,int toindex,value)

      该方法将指定的 int 值分配给int 类型数组指定范围中的每个元素。填充范围从索引 fromIndex(包含)到索引 toindex(不包含)。如果 fromindex == toindex,则填充范围为空。

      •  array:要进行填充的数组;
      • fromindex:使用指定值填充的第一个元素的索引(包括);
      • toindex:使用指定值填充的第二个元素的所有(不包括);
      • value:要进行填充的值;

    Demo:

  1. public static void main(String[] args) {
  2. int[] array = new int[]{5,15,25,35,45,55,65,75,85,95};
  3. Arrays.fill(array,2,6,8);
  4. for (int i : array) {
  5. System.out.println(i);
  6. }
  7. }

    Tips:如果指定的索引位置大于或等于要进行填充的数组的长度,则会报出 ArrayIndexOutofBoundsException (数组越界异常)。

  6、对数组进行排序

    可以通过 Arrays 类的静态 sort() 方法可以实现对数组的排序。该方法提供了多种重载形式,可对任意类型的数组进行升序排序。

    语法格式:

  1. Arrays.sort(Object) // Object 是进行排序的数组名称

  7、复制数组

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

    (1)copyOf 方法

      该方法提供了多种重载形式,用于满足不同类型数组的复制。

      语法格式:

  1. copyOf(array,int newlength);
      • array:要进行复制的数组;
      • newlength:int型常量,指复制后的新数组的长度。如果新数组的长度大于数组 array 的长度,则根据不同类型的数组用各自的默认值填充(如int类型用0填充),如果复制后的数组长度小于数组 array 的长度,则会从数组 array 的第一个元素开始截取至满足新数组长度为止。

    Demo:

  1. public static void main(String[] args) {
  2. int[] array = new int[]{12,15,17};
  3. int[] newarray = Arrays.copyOf(array,5);
  4.  
  5. for (int i:newarray) {
  6. System.out.println(i);
  7. }
  8. }

    (2)copyOfRange 方法

      格式语法:

  1. copyOfRange(array,int fromIndex,int toIndex)
      •   array:要进行辅助的数组对象;
      • fromIndex:指定开始复制数组的索引位置,fromindex 必须在 0 至整个数组的长度之间。新数组包括索引是 fromIndex 的元素。
      • toIndex:要复制范围的最后索引,可大于数组 array 的长度。新数组不包括索引是 toIndex 的元素。

      Demo:

  1. public static void main(String[] args) {
  2. int[] array = new int[]{12,15,17};
  3. int[] newarray = Arrays.copyOfRange(array,1,5);
  4.  
  5. for (int i:newarray) {
  6. System.out.println(i);
  7. }
  8. }

  8、数组查询

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

    (1)binarySearch(Object[],Object key)

      语法格式:

  1. binarySearch(Object[] array,Object key)
      • array:要搜索的数组;
      • key:要搜索的值;
      • 如果 key 包含在数组中,则返回索引值的索引,否则返回 -1 或“-”(插入点)。插入点是搜索键将要插入数组的那一点,即第一个大于此键的元素索引。

      Demo:

  1. public static void main(String[] args) {
  2. int[] array = new int[]{4,25,12,15,17};
  3. int index = Arrays.binarySearch(array,8);
  4. System.out.println(index);
  5. }

      Tips:在进行调用之前对数组进行排序(通过 sort() 方法,如果没有对数组排序,结果是不确定的)

    (2)binarySearch(Object[],int fromIndex,int toIndex,Object key)

      该方法在指定的范围内检索某一元素。

      语法格式:

  1. binarySearch(Object[] array,int fromIndex,int toIndex,Object key)
      • array:要进行检索的数组
      • fromIndex:指定范围的开始处索引(包含)
      • toIndex:指定范围的结束处索引(不包含)
      • key:要搜索的元素。

    Tips:如果范围中的所有元素都小于指定的键,则为 toIndex。

二、数组排序算法

  1、冒泡排序

    冒泡排序是最常用的数组排序算法之一,它排序数组元素的过程总是将小数往前放、大数往后放,类似于水中气泡往上升的动作,所以称作冒泡排序。

    基本思想:对比相邻的元素值。

    参考:冒泡排序

     代码实现:

  1. int array[] = {12,58,3,46,18,43};
  2. for (int i = 0; i < array.length - 1; i++) {
  3. for (int j = 0; j < array.length - 1 - i; j++) {
  4. if (array[j] > array[j + 1]) {
  5. int temp = array[j];
  6. array[j] = array[j + 1];
  7. array[j + 1] = temp;
  8. }
  9. }
  10. System.out.println("第" + i + "次排序结果:" + Arrays.toString(array));
  11. }

  2、反转排序

    数组的反转:数组中的元素颠倒顺序,例如原始数组为1,2,3,4,5,反转后的数组为5,4,3,2,1

    实现思想:数组最远端的元素互换位置

      •  实现反转,就需要将数组最远端元素位置交换
      • 定义两个变量,保存数组的最小索引和最大索引
      • 两个索引上的元素交换位置
      • 最小索引++,最大索引--,再次交换位置
      • 最小索引超过了最大索引,数组反转操作结束

    流程图:

    

      代码实现:

  1. public static void main(String[] args) {
  2.   int[] arr = { 1, 2, 3, 4, 5 };
  3.   /*
  4.   循环中定义变量min=0最小索引
  5.   max=arr.length‐1最大索引
  6.   min++,max‐‐
  7.   */
  8.   for (int min = 0, max = arr.length 1; min <= max; min++, max‐‐) {
  9.   //利用第三方变量完成数组中的元素交换
  10.   int temp = arr[min];
  11.   arr[min] = arr[max];
  12.   arr[max] = temp;
  13.   }
  14.   // 反转后,遍历数组
  15.   for (int i = 0; i < arr.length; i++) {
  16. 16   System.out.println(arr[i]);
  17. 17   }
  18. }

三、数组作为方法参数和返回值

  1、数组作为方法参数

    数组作为方法参数传递,传递的参数是 数组内存的地址

   Demo:

  1. public static void main(String[] args) {
  2.   int[] arr = { 1, 3, 5, 7, 9 };
  3.   //调用方法,传递数组
  4.   printArray(arr);
  5. }
  6. /*
  7. 创建方法,方法接收数组类型的参数
  8. 进行数组的遍历
  9. */
  10. public static void printArray(int[] arr) {
  11.   for (int i = 0; i < arr.length; i++) {
  12.     System.out.println(arr[i]);
  13.   }
  14. }

  Tips:方法的参数为基本类型时,传递的是 数据值. 方法的参数为引用类型时,传递的是 地址值.。

  2、数组作为方法返回值

    数组作为方法的返回值,返回的是 数组的内存地址

    Demo:

  1. public static void main(String[] args) {
  2.   //调用方法,接收数组的返回值
  3.   //接收到的是数组的内存地址
  4.   int[] arr = getArray();
  5.   for (int i = 0; i < arr.length; i++) {
  6.     System.out.println(arr[i]);
  7.   }
  8. }
  9. /*
  10. 创建方法,返回值是数组类型
  11. return返回数组的地址
  12. */
  13. public static int[] getArray() {
  14.   int[] arr = { 1, 3, 5, 7, 9 };
  15.   //返回数组的地址,返回到调用者
  16.   return arr;
  17. }

  总结:任何数据类型都能作为方法的参数类型,或者返回值类型

Java 数组(二)基本操作的更多相关文章

  1. Java数组的基本操作

    public class Array1 { public static void main(String[] args) { int [] num={1,2,3,4,5}; System.out.pr ...

  2. 1.1使用java数组,并开始封装我们自己的数组

    今天感冒了,全身酸软无力,啥样不想做,就来学习吧,此节我们从初步使用java中提供的数组,然后分析相关情况,过渡到封装我们自己的数组. 一.我们先来感受一下java提供的数组,以整型数组(int[]) ...

  3. Java基本语法-----java数组(一维数组二维数组)

    嘿嘿!你们懂的,又是图片,委屈大家了. java数组(一维数组二维数组) [正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!下面有个"顶"字,你就 ...

  4. Java - 数组详解(图解数组的基本操作)

    目录 什么是数组 数组的定义和内存分配 数组的赋值和访问 数组的注意事项 数组的内存图解 数组的插入 数组的删除 数组的扩容 数组的反转 首先 什么是数组 数组是一组地址连续.长度固定的具有相同类型的 ...

  5. 优雅写Java之二(数组集合流)

    一.数组 二.集合 三.流 学习整理中,本文待补充--

  6. (二)Java数组的使用

    Java数组 无序数组插入删除查询操作: public class ArrayList { private static int[] intArray; private int nElems; pub ...

  7. No1_4.数组的基本操作_Java学习笔记

    import java.util.Arrays; public class HelloArrayOp { public static void main(String[] args) { // TOD ...

  8. Java开发知识之Java数组

    Java开发知识之Java数组 一丶数组简介 首先,不管是Java 还是 C++ 还是其它语言.都有数组. (有可能叫法不同) 数组简而言之就是存储一段连续相同数据类型的数据结构 在Java中数组可以 ...

  9. Java数组声明创建和使用以及多维数组、Arrays类、稀疏数组

    目录 数组概述 数组声明创建 内存分析 java内存分析 堆 栈 方法区 三种初始化 静态初始化 动态初始化 数组的默认初始化 数组的四个基本特点 数组边界 小结: 数组使用 数组基础使用 For E ...

随机推荐

  1. scapy构造数据包

    一.进入scapy交互界面 在终端下输入:scapy ,进入交互界面: 二.查看scapy已经实现的网络协议 ls() 列出scapy中已实现的网络协议 ls(协议类型) 查看某个协议头部字段格式 l ...

  2. Windbg Scratch Pad(便笺簿)窗口的使用

    “便笺簿”窗口是一个剪贴板,您可以在其中键入和保存文本. 打开便笺簿 通过菜单View--->Scratch Pad 通过快捷键Alt+8 通过工具栏 使用便笺簿 用上面的方式打开的窗口如下: ...

  3. django -- ORM查询

    前戏 在我们之前操作ORM中,你也许是启动Django项目,通过地址访问固定的函数,或者在pycharm里的python console里执行,第一种比较麻烦,而且每次都要启动项目,写路由,第二种虽然 ...

  4. (转)Qt中文手册 之 QApplication

    QApplication管理GUI程序的控制流和主要设置. QApplication包含由窗口系统和其他来源处理过和发送过的主事件循环.它也处理应用程序的初始化和收尾工作,并提供对话管理.QAppli ...

  5. gethostbyaddr

    函数原型: #include<netdb.h> struct hostent * gethostbyaddr(const char *addr, socklen_t len, int fa ...

  6. display:none和visibility:hidden

    w3school学习网:https://www.w3school.com.cn/tiy/t.asp?f=hdom_style_display_none display: none----将元素的显示设 ...

  7. MongoDB Shell 命令

    更新列名 db.Stores.update({}, {$rename : {"StoreId" : "MetaId"}}, false, true) 查询长度 ...

  8. 【操作系统之三】Linux下进程间通信-IPC(Inter-Process Communication)

    管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信:信号(Sign ...

  9. Shell脚本之三 传递参数

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推-- 实例 向脚本传递三个参数,并分 ...

  10. 深入理解AQS

    前记 在看JUC中并发相关的源码时经常看到AQS的身影,这到底是个什么鬼?必须要一探究竟. 一. AQS背景了解 JUC包中的锁,包括: Lock接口,ReadWriteLock接口,LockSupp ...