• Java探索之旅(5)——数组


    1.声明数组变量:

               double[] array=new double[10];
               double array[]=new double[10];
               double[] array1=new double[5];
               double[] mylist={1.0,2.0,3.0,4.0};//声明创建和初始化一句表达,不能拆分


    	    double[][] myArray=new double[2][];//maArray.length=5,注意此时new double创建时必须指定第一个下标
    	    myArray[0]=new double[5];//myArray[0].length=5
    	    myArray[1]=new double[4];//myArray[1].length=4
    	    myArray[2]=new double[3];//myArray[2].length=3
    	    myArray[3]=new double[2];//长度为2
    	    myArray[4]=new double[1];//长度为1
                int [][] myArray2={{1,2,3,4,5},{6,7,8,9},{10,11,12},{13,14},{15}};//声明创建和初始化一句表达,不能拆分

      注意

         ❶声明数组变量"double[] array";并不会在内存中分配空间,只是创建一个对数组应用的存储位置。默认值为null。实质上,array只是一个含有10个double元素数组的引用变量。

         ❷创建数组数即不能修改大小。可以使用array.length获取长度。

         ❸创建数组后,元素均赋予默认值。基本类型默认0,char默认‘u0000’,boolen类型默认false

         ❹不同于C++采取一行填满才能存下一行的存储模式,Java每行的元素个数可以不同。

         ❺Java的数组变量的维度,额可以使用控制台输入的形式,如下:

    Scanner input=new Scanner(System.in);
    int length=input.nextInt();
    int[]  intArray=new int[length];
    for(int u:intArray)//使用for-each遍历
        System.out.println(u);

    2.初始化与赋值

         ❶直接初始化 double[] mylist={1.0,2.0,3.0,4.0};//未使用new,但声明、创建和初始化必须放在一条语句中

         ❷基于索引(0开始),或者使用for循环,一一初始化。可使用Scanner对象从控制台获得初始化

         ❸相同长度的数组变量可以使用for循环赋值或者初始化

         ❹数组复制,赋值或者复制数组初始化某个数组。复制之前目标数组应该已经分配存储空间
    arraycopy(sourceArray,src_pos,targetArray,tar_pos,length)

         ❺数组名赋值array=array1,不复制内容,仅复制array1的引用值至array。array和array1将指向同一个数组,原来array指向的new double[10]则不能再引用,变成垃圾由JAVA虚拟机自动收回。

    3.遍历和输出

         ❶基本类型可以使用循环输出

         ❷char数组,可以使用数组名输出输出,如System.out.println(charArrayName).

         ❸for-each遍历

                 for(Type u:array)//对array中的所有元素,进行process操作。u和array的类型应该一致
                      {Process(u)........}.

    4.作函数的形参或返回类型

         ❶使用值传递。不同于基本数据类型作形参,形参数组值变导致实参亦变

         ❷ 直接使用数组作为形参: function(dataType[] name)
           使用匿名数组显式引用如:printArray(new int[]{1,2,3,4,5,6});//直接使用初始化常量

         ❸返回类型为数组类型 

                   dataType[]  function(....)
                      { dataType[] data=new dataType[10];
                          ..........;
                          return data;}

       以下生成随机字符数组并统计每个字符出现的次数:

    package StudyArray;
    public class StudyArray {
    	public static void main(String[] args) {	    
    		//随机生成50个数组并且,统计生成的个数
    		char[] charArray=new char[50];
    	    ArrayProcess.creatCharArray(charArray);
    	    int[] count=ArrayProcess.count(charArray);
    	    ArrayProcess.printArray(charArray);
    	    for(int i=0;i<26;i++)
    	    	System.out.println((char)(i+'a')+"---共有"+count[i]+"个");	
    	}
    }
    
    package StudyArray;
    public class ArrayProcess {
       public static void printArray(char[] charArray)
    	{
    		for(int i=0;i<charArray.length;i++)
    	    	if((i+1)%10==0)
    	    		System.out.println(charArray[i]);
    	    	else
    	  		     System.out.print(charArray[i]+" ");	
    	}
       public static void creatCharArray(char[] charArray)
       {
    	   for(int i=0;i<charArray.length;i++)
    		   charArray[i]=RandomCharacter.getRandomLower();
       }
       public static int[] count(char[] charArray)
       {
    	   int[] count=new int[26];//26个字母
    	   for(int i=0;i<charArray.length;i++)
    		  count[charArray[i]-'a']++;
    	   return count;
       }
    }

             2维数组作参数如int[][] intArray,则声明function(int [][]),使用形式如function(intArray),然后分别对应使用1维长度和2长度进行遍历元素,可以参考数组创建法。

    5.可变长参数列表

        只能给方法(函数)最多1个可变长参数,且必须是函数参数表的最后一个参数。Java将可变长参数视作数组。在使用时,实参可以是同类型的数组或者可变的参数个数,Java创建数组并将参数传递给形参。

        以下求数值中最大数:

    package StudyArray;
    public class StudyArray {
    	public static void main(String[] args) {	    
    		 printMax(new double[]{12,-15,4,0,7,23});//匿名数组形参
    		 printMax(0,1,2,3,4,5,6);//可变参数个数
    	}
    	public static void printMax(double...numbers)//可变长参数列表
    	{
    		double result=numbers[0];
    		for(int i=1;i<numbers.length;i++)
    			if(result<numbers[i])
    				result=numbers[i];
    	    System.out.println("the max of these number is--"+result);
    	}
    }

    6.Arrays类

       java.util.Arrays包括多种静态的数组处理函数,如排序,比较,填充,查找函数。对所有基本类型都已经重载。

            ❶java.util.Arrays.sort(array)//升序排列,sort(array,a,b),目标排序段索引为[a b-a]

            ❷java.util.Arrays.binarySearch(array,target)//数组必须提前安增序排列,存在返回index(从0),不存在返回“-(插入点下标+1)”

            ❸java.util.Arrays.equals(array1,array2);//判断2个数组是否相等,相等返回ture,不等false。可以输出

            ❹java.util.Arrays.fill(array,8);//整个数组填充8,fill(array,2,4,8),8部分填充


  • 相关阅读:
    QQ邮箱自动删除邮件脚本
    5ppm高精度自动同步标准化考场时钟系统
    GPS时钟之户外防水防雷细节
    C/C++ Compile Run插件,使用某些头文件出现重定义的错误,解决方法为修改MinGW的路径
    7zip 通过指令压缩 仅存储压缩 分压缩卷 / 对文件夹里的文件进行解压,解压到对应文件名所在的文件夹上
    循环队列FIFO
    cglib和jdk代理的字节码生成配置
    SpringXML的beans标签后的一串网址相关的属性有什么用
    service和server这两个单词的区别
    没有代码提示的地方,前后引用记得用复制不要手打
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5393098.html
Copyright © 2020-2023  润新知