数组 妙用 —— Java篇

数组 妙用 —— Java篇,第1张

数组 —— Java篇

文章目录
  • 数组 —— Java篇
    • 数组的概念:
    • 数组的创建
      • 数组的创建有两种方式:
    • 数组名的地址
      • 代码演示:
      • 数组的 null 化
    • 数组的遍历
      • 求数组的长度:
        • 代码实例:
      • 数组的遍历
        • 代码实例:
      • 打印数组:
        • 扩展for 语句:
        • 注意不要越界访问数组
      • 数组的传参
        • 上述代码:图解
        • 通过数组的引用类型(地址)方法交换数值
    • 最后:
      • 每博一文案


数组的概念:
  • 数组就是一种存储多个数据的容器,数组中的每一个元素类型需要保持一致性,

  • 数组本身是也是一种引用类型,引用类型存放数组的首地址,与C语言中的指针相似,存放地址。

  • 数组是元素是在堆区存放的,与C语言不同,C语言是在栈区上开辟空间的


数组的创建 数组的创建有两种方式:
//数组的类型[] 数组名 = new 数组类型[]{元素1,元素2,元素3};
  int[] arr = new int[]{...}; // 动态初始化

  int[] arr = {...};
// 数组的类型[] 数组名 = {元素1,元素2,元素3};静态初始化

  • 它们在一定的程度上是没有什么区别的

public class Study05 {
 /*数组的声明,定义*/
    public static void main1 (String[] args) {
        int[] arr ={1,2,3};
        int[] arr1 = new int[]{4,5,6};
        int[] arr2 = new int[3];
//        new 实例化一个对象
//        int[] 引用类型 ——> 与C语言中的指针类似,arr ,arr1,arr2 存放地址;
//        int[] arr,arr,arr2 是在内存栈上的开辟占用空间,存放数据的(指向后面堆区开辟的首地址)
//        而后面的 new ... 是在堆区中开辟空间,存放数据的
        /*Java虚拟机栈    Java本地方法栈
        * 堆     方法区          程序计数器  */
    }
}


数组名的地址
  • 在 Java 当中你是取不到,数组真实的地址的,你所取到的地址只是被哈希加密过的一个数值,这一点鲜明的体现了 Java 不同于C语言的安全性。
  • 不过你可以间接的认为是一个地址,因为地址的特点就是唯一性,儿被哈希加密过返回的值,也是具有唯一性的

代码演示:
public class Study05 {
   public static void main (String[] args) {
        int[] array = new int[]{1,2,3,4,5,6};
        System.out.println("array ="+array);
        /*注意 Java 是无法拿到地址的,再次鲜明出Java是一种安全语言
        * Java中的地址是被哈希函数加密了过的,但也是具有唯一性的特征,
        * 所以你可以间接的认为是个地址*/
    }
}



数组的 null 化
  • null 在 Java 中是表示 ”空引用“,也就是一个无效的引用。
  • null 的作用类型于C语言中的 NULL (空指针),都是表示一个无效的内存位置,因此不能对这个内存进行任何的读写 *** 作,一旦尝试读写,就会抛出 NUllPoninterException


public class Study05 {
    public static void main (String[] args) {
        int[] arr = null;
        System.out.println(arr);
        System.out.println(arr[0]);
    }


数组的遍历 求数组的长度:
  • 使用 {数组名+length} 可以求出对应数组的长度
代码实例:

public class Study05 {
    public static void main (String[] args) {
        int arr[] = new int[]{1,2,3,4,5,6,7,8,9,10};
        int len = arr.length;
        System.out.println("len ="+len);
    }
}



数组的遍历
  • 通过访问数组的下标,实现打印数组

代码实例:
public class study05 {
	public static void main3 (String[] args) {
        int[] array = new int[]{1,2,3,4,5,6};
        int len = array.length;  // 求数组的长度;
        for (int i = 0; i < len; i++) {
            System.out.println(array[i]);
        }
    }
}

打印数组: 扩展for 语句:
  • 我们已经学过了,for 循环语句的基本用法,
  • 这里我介绍另外一种 for 的用法,—— 扩展for语句 ( foreach ) ,就可以非常简洁地实现数组的遍历。
  • 废话不多说,上 *** 作

public class Study05 {
	public static void main8 (String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10};
        for (int num:arr) { // 这里是 foreach 
            System.out.print(num);
        }
    }
}

  • 上述代码的解析:
    • 在扩展for语句中for (int num : arr ), 冒号{ : }的意思是 ”…中” ,可以将其读作英文的 “in"
    • 括号中的 { num } 表示的是当前正在查看的元素的一个临时寄放,遍历过程中正在查看的元素,所以其定义的类型要与数组元素的类型一致;
    • 使用扩展 foreach 语句的好处如下:
      • 省去了确认数组的长度(元素个数)的 *** 作
      • 可以使用与迭代器相同的方法来执行遍历

注意不要越界访问数组
public class Study05 {
  // 下标越界访问示范
    public static  void main6 (String[] args) {
        int[] arr = new int[]{1,2,3};
        System.out.println(arr[3]); // 下标越界访问了
    }
}



数组的传参
  • 数组——> 引用类型——> 地址
  • 引用变量是在栈区上开辟空间的,而后面数组元素是在堆区中开辟空间的

public class Study05{
//    数组引用类型参数
    public static void printArray (int[] arr2) {
        for (int num:arr2) {
            System.out.print(num+"\t");
        }
    }

    public static int[] tranSform(int[] arr3) {
        int[] ret = new int[arr3.length];
        for (int i = 0; i < arr3.length; i++) {
            ret[i] = arr3[i]*2;
        }
        return ret;
    }
    public static void main13 (String[] args) {
        Study05 tranSform = new Study05();
        Study05 printArray = new Study05();
        
        int[] arr1 = new int[]{1,2,3};
        Study05.printArray(arr1);
        System.out.println("\n 变化后的数值");
        int[] output = Study05.tranSform(arr1);
        Study05.printArray(output);
    }
}

上述代码:图解


通过数组的引用类型(地址)方法交换数值
  • 通过数组传参,而实现方法的交换数值

public class Study05 {
//    通过数组进行数值的交换
    public static void printarray (int[] array) {
        int tmp = array[0];
        array[0] = array[1];
        array[1] = tmp;
    }
    public static void main11 (String[] args) {
        Study05 printarray = new Study05();
        int[] array = new int[]{10,90};
        for (int tmp:array) {
//            System.out.println("为交换前的数值:array[0]="+array[0]+"array[1]"+array[1]);
            System.out.print(tmp);
        }
        System.out.println("\n交换后的数值:");
        Study05.printarray(array);
        for (int tmp:array) {
            System.out.print(tmp);
        }

    }
}

最后: 每博一文案

面对利益的时候,人与人的交往中利益永远是很重要的。

试金石生活中总是会有这样的人,吃饭时指点江山,结账时不见人影,需要帮助好言好语,别人有难时,默不作声,

这样的人看着好卖肉请,其实却是口不对心。

面对利益的时候斤斤计较,连一分钱都要算清你这样的人,交往受伤的总会是自己。

​ —————— 一禅心灵庙语

限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/713492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存