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");

                  }

         }

}

 

    原文作者:清如许.
    原文地址: https://blog.csdn.net/MacWx/article/details/89016501
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞