java数组的三种扩容方式,二维数组,数组的三种排序方式

简介: java数组的三种扩容方式,二维数组,数组的三种排序方式

因为数组是在内存中连续的一段存储空间,所以数组一旦被创建,空间就固定了,长度是不能扩增的。


数组的长度是固定的,如果需要扩充,必须创建新数组,原数组的长度要复制到新数组中 。


java中,数组类型的变量传值的时候,事实上传递的是数组的地址 。


数组扩容的方式有几种,分别是什么?

新建一个数组,把原来数组的内容搬到 新数组中。

  1. 用一个循环将原来数组地址换到新的大数组地址中
  2. 用系统定义函数system.arraycopy实现扩容;
  3. 用系统定义函数copyof函数实现扩容;

下面介绍数组的第一种扩容方式:将原来数组地址换到新的大数组地址中

class kuor{
  //数组的扩容问题
  public static void main(String[] args) {
    //定义连个数组,将a数组扩容到8个元素
    int a[] ={1,2,3,5};
    int b[]= new int[a.length*2];
    //将数组a的元素循环遍历到数组b中
    for (int i=0;i<a.length;i++) {
      b[i]=a[i];
    }
    //将数组b的地址重新指向a,即将原来a的地址换到原来b 的地址上,完成扩容。
    a=b;
    //测试是否扩容完成,输出此时数组a中的值
    for (int i=0;i<a.length;i++) {
      System.out.println("aaaa:"+a[i]);
    }
  }
}

数组的第三种扩容方式,这里我定义了三个函数分别三种扩容方式;

class expand2{
  //利用函数的方法进行数组的扩充
  public static void main(String[] args) {
    //定义一个小型的数组
    int[] a={1,2,3,5};
    //调用扩容函数
    a=expand4(a);
    //测试是否扩容完成,输出此时数组a中的值
    for (int i=0;i<a.length;i++) {
      System.out.println("aaaa:"+a[i]);
    }
  }
  //扩容函数,
  public static int[] expand2(int a[]){
    //定义一个新数组b,并为其赋值长度为数组a的二倍
    int b[] = new int[a.length*2];
    //将数组a的元素循环遍历到数组b中
    for (int i=0;i<a.length;i++) {
      b[i] = a[i];
    }
    //返回扩容后的数组b
    return b;
  }
  //数组扩容方法3,利用系统函数arraycopy进行扩容
  public static int[] expand3(int a[]){
    int[] b = new int[a.length*2];
    //系统函数进行扩容,将a[]的值赋值到b[]中,共a.length个长度。
    //相当于第19-21行
    System.arraycopy(a,0,b,0,a.length);
    return b;
  }
  //数组扩容方法4,利用系统函数copy进行扩容
  public static int[] expand4(int a[]){
    //可以查看api文档,java.util.Arrays.copyOf的详细使用;
    return java.util.Arrays.copyOf(a,a.length*2);
  }
}

二维数组

Java中所实现的二维数组,其实是一维数组的 __嵌套 _______ 。

二维数组也支持显示初始化

二维数组可以不指定低维,高维必须指定;  

基本语法:


       a.声明

           数据类型[][] 数组名;

       b.分配空间    

           数组名= new 数据类型[行号|高维数组的长度][列号|低维数组的长度];

         

       c.为二维数组元素赋值:数组名[行号|高维数组的下标][列号|低维数组的下标] = 数值;

           取值:System.out.println(数组名[行号|高维数组的下标][列号|低维数组的下标]);

       d.循环遍历:双重循环


 //使用双重for循环  进行遍历二维数组
            for(int i=0;i<a.length;i++){  //a.length 高维数组的长度  多少行
                for(int j=0;j<a[i].length;j++){    //a[i].length  低位数组的长度  多少列
                    System.out.print(a[i][j]+"\t");
                }
                System.out.println();
            }

 多种创建语法:

       声明并分配空间:int[][]  a = new int[4][3];

                                    int[][] a = new int[4][]; //不规则数组,低维数组的长度通过new一维来决定

                     

       声明的同时并赋值:int[][]  a = new int[][]{{10,8,7},{20,45,60},{14,25,70},{120,20,7}};

                                       int[][] a = {{10,8,7},{20,45},{14,25,70,40},{120}}; //不规则数组

     

完成数组的冒泡排序算法 ,给定数组:int[] a = {1,2,3,4,5},利用冒泡排序对其按照从大到小的顺序排序,然后输出结果。

冒泡排序:两个相邻数相比,循环冒泡n-1次;
class paixu{
         //冒泡排序
         public static void main(String[] args) {
                  int[] a = {4,5,2,1,6,83,9,7,0};
                  for(int i=1;i<a.length;i++){//注意:这里的i初值应从1开始;
                          //内层循环控制排序次数
                          for (int j=0;j<(a.length-i);j++) {
                                   //交换次序,比较两个数的大小,大的往后移
                                   if (a[j]>a[j+1]) {
                                            int t;
                                            t=a[j];
                                            a[j]=a[j+1];
                                            a[j+1]=t;
                                   }
                          }
                  }
                  //再次循环看看排序是否成功
                  for (int i=0;i<a.length;i++) {
                          System.out.print(a[i]+"\t");
                  }
         }
}

完成对上题中数组的选择排序算法。

选择排序:一个数和剩下所有数比
class xuanze{
         //选择排序,将一个数和剩下所有数相比
         public static void main(String[] args) {
                  int[] a = {4,5,2,1,6,83,9,7,0};
                  //外层循环从0开始,循环length-1次
                  for (int i=0;i<a.length-1 ;i++ ) {
                          //从i+1开始,到length,
                          for (int j=i+1;j<a.length ;j++ ) {
                                   //依次比较第一个数和后面所有的数,最小的放最前面,调换顺序
                                   if (a[i]>a[j]) {
                                            int t=a[i];
                                            a[i]=a[j];
                                            a[j]=t;
                                   }
                          }
                  }
                  //再次循环输出数组的各个元素
                  for (int i=0;i<a.length ;i++ ) {
                          System.out.print(a[i]+"\t");
                  }
         }
}

完成对4题中数组的快速排序算法。

class kuaisu{
       //快速排序
       public static void main(String[] args) {
              int[] a = {4,5,2,1,6,83,9,7,0};
              //sort使用快速排序法,
              java.util.Arrays.sort(a);
              //再次循环输出数组的各个元素
              for (int i=0;i<a.length ;i++ ) {
                     System.out.print(a[i]+"\t");
              }
       }
}

将一个给定数组int[] a={1,2,3,4,5,6} 逆序输出。        

 class nixu{
         //将一个给定数组int[] a={1,2,3,4,5,6} 逆序输出。
         public static void main(String[] args) {
                  int[] a = {1,2,3,4,5,6};
                  for (int i=a.length-1;i>=0 ;i-- ) {
                          System.out.print(a[i]+"\t");
                  }
         }
}


目录
相关文章
|
29天前
|
存储 Java 计算机视觉
Java二维数组的使用技巧与实例解析
本文详细介绍了Java中二维数组的使用方法
46 15
|
30天前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
4月前
|
存储 Java
【编程基础知识】 分析学生成绩:用Java二维数组存储与输出
本文介绍如何使用Java二维数组存储和处理多个学生的各科成绩,包括成绩的输入、存储及格式化输出,适合初学者实践Java基础知识。
112 1
|
1月前
|
存储 Java 索引
Java基础(六):数组
Java基础(六):数组
29 10
Java基础(六):数组
|
29天前
|
存储 Java C++
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
62 12
|
1月前
|
Java 程序员
Java 排序神器:Comparable 和 Comparator 该怎么选?
嗨,大家好,我是小米!今天和大家聊一聊Java社招面试中常考的经典问题——Comparable和Comparator的区别。Comparable定义对象的自然排序,适用于单一固定的排序规则;Comparator则是策略接口,用于定义自定义排序规则,适用于多样化或多变的排序需求。掌握这两者的区别是理解Java排序机制的基础,也是面试中的加分题。结合实际项目场景深入探讨它们的应用,能更好地打动面试官。如果你觉得有帮助,欢迎点赞、收藏、分享,期待你的一键三连!我们下期见~ 我是小米,一个喜欢分享技术的程序员,关注我的微信公众号“软件求生”,获取更多技术干货!
46 20
|
3月前
|
Java 索引 容器
Java ArrayList扩容的原理
Java 的 `ArrayList` 是基于数组实现的动态集合。初始时,`ArrayList` 底层创建一个空数组 `elementData`,并设置 `size` 为 0。当首次添加元素时,会调用 `grow` 方法将数组扩容至默认容量 10。之后每次添加元素时,如果当前数组已满,则会再次调用 `grow` 方法进行扩容。扩容规则为:首次扩容至 10,后续扩容至原数组长度的 1.5 倍或根据实际需求扩容。例如,当需要一次性添加 100 个元素时,会直接扩容至 110 而不是 15。
Java ArrayList扩容的原理
|
4月前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
48 4
|
4月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
61 2
|
4月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
127 2