zoukankan      html  css  js  c++  java
  • java之数组

    数组概述

    关于数组我们可以把它看作是一个类型的所有数据的一个集合,并用一个数组下标来区分或指定每一个数,例如一个足球队通常会有几十个人,但是我们来认识他们的时候首先会把他们看作是某某对的成员,然后再利用他们的号码来区分每一个队员,这时候,球队就是一个数组,而号码就是数组的下标,当我们指明是几号队员的时候就找到了这个队员。 同样在编程中,如果我们有一组相同数据类型的数
    据,例如有10个数字,这时候如果我们要用变量来存放它们的话,就要分别使用10个变量,而且要记住这10个变量的名字,这会十分的麻烦,这时候我们就可以用一个数组变量来存放他们,例如在VB中我们就可以使用dim a(9) as integer(注意:数组的下标是从0开始的,所以10个数的话,下标就是9,a(0)=1)。 使用数组会让程序变的简单,而且避免了定义多个变量的麻烦。

    数组的定义:

    数组是相同类型数据的有序集合.
    数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
    其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们
    .

    数组的四个基本特点:

    1. 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
    2. 其元素必须是相同类型,不允许出现混合类型。
    3. 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
    4. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

    数组声明创建

    1、声明数组
    首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
    建议使用 dataType[] arrayRefVar 的声明风格声明数组变量。 dataType arrayRefVar[] 风格是来自
    C/C++ 语言 ,在Java中采用是为了让 C/C++ 程序员能够快速理解java语言。
    2、创建数组

    Java语言使用new操作符来创建数组,语法如下:
    //1.声明一个数组
            int[] mylist = null;
    // 2.创建一个数组
            mylist = new int[4];
            //3.在数组中存值
            mylist[0] = 1;
            mylist[1] = 2;
            mylist[2] = 3;
            mylist[3] = 4;
    //静态初始化;定义数组的同时就为数组元素分配空间并赋值
            int[] a={1,2,3};
     
    //动态初始化:数组定义、为数组元素分配空间、赋值的操作、分开进行
            int[] b = new int[2];
            b[0] = 1;
            b[1] = 2;
    下面是另一种方式对创建数组的描述:
    dataType[] arrayRefVar; // 首选的方法
    或
    dataType arrayRefVar[]; // 效果相同,但不是首选方法
    
    double[] myList; // 首选的方法
    或
    double myList[]; // 效果相同,但不是首选方法
    arrayRefVar = new dataType[arraySize];//大概是动态创建
    
    

    上面的语法语句做了两件事:

    一、使用 dataType[arraySize] 创建了一个数组。
    二、把新创建的数组的引用赋值给变量 arrayRefVar。
    数组变量的声明,和创建数组可以用一条语句完成,如下所示:
    数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 arrayRefVar.length-1。

    下面是个人总结:

    1:打印数组要用:Arrays.toString() //导入操纵数组的包import java.util.Arrays
    2:java中的变量创建需要给他指定类型,该变量赋值给另外一个变量,若不同类型需要强制转换,加上变量的属性

    //将数组转化为列表
           int[] a12 = {3,5,1,9,7};
           List<int[]> list = Arrays.asList(a12);
           System.out.println(" Arrays.asList将数组转化为列表:"+list);
    

    3:方法直接调用,有return才赋值给变量,这样它可以打印出来
    1:给数组赋值:通过 fill 方法。
    2:对数组排序:通过 sort 方法,按升序。
    3:比较数组:通过 equals 方法比较数组中元素值是否相等。
    4:查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
    2:Arrays.sort(mylist1);排序
    4:Arrays.binarySearch(mylist1, 3.4))//查找数组元素3.4的索引
    1:Arrays.fill(mylist1, 0,2, 100)//替换数组mylist1中0,2索引的元素为100
    For-Each循环能在不使用下标的情况下遍历数组

     for(double element:mylist1){//element是必要的参数,mylist1是数组,double是数据类型
               System.out.println(element);
           }
    

    完整代码

    import java.util.Arrays;//导入操控数组的包
    import java.util.List;
    
    public class Array_test {
       public static void main(String[] args) {
            //1.声明一个数组
            int[] mylist = null;
            /*1. 声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有
    关。因此,声明数组时不能指定其长度(数组中元素的个数),例如: int a[5]; //非法
    2. 声明一个数组的时候并没有数组被真正的创建。
    3. 构造一个数组,必须指定长度 */
    
            // 2.创建一个数组
            mylist = new int[4];
            //3.在数组中存值
            mylist[0] = 1;
            mylist[1] = 2;
            mylist[2] = 3;
            mylist[3] = 4;
            // 计算所有元素的总和
            double total = 0; //这里扩大变量的存储空间
            for(int i = 0 ;i<mylist.length;i++){
                total += mylist[i];
            }
            System.out.println("总和为:"+total);
            
            
            //静态初始化;定义数组的同时就为数组元素分配空间并赋值
            int[] a={1,2,3};
            // Man[] mans = {new Man(1,1),new Man(2,2)};
            System.out.println("定义数组的同时就为数组元素分配空间并赋值" + a[1]); //打印数组因该不适用println
            System.out.println("定义数组的同时就为数组元素分配空间并赋值" + Arrays.toString(a)); //打印数组因该不适用println
            
            
            //动态初始化:数组定义、为数组元素分配空间、赋值的操作、分开进行
            int[] b = new int[2];
            b[0] = 1;
            b[1] = 2;
            // java中创建出了变量,但并没有赋值,系统会给他们默认赋值
            boolean[] c = new boolean[2];
            String [] s = new String[2]; //int类型的默认赋值为0
            System.out.println("boolean默认赋值:"+c[0]+c[1]); //false
            System.out.println("String默认赋值:"+s[0]+s[1]); // null
    
            
            // For-Each循环能在不使用下标的情况下遍历数组
           double[] mylist1 = {11.9,22.9,3.4,3.5};
            Arrays.sort(mylist1);
            System.out.println(" Arrays.sort()可以对列表排序"+Arrays.toString(mylist1));
            //二分法查找数组的索引
            System.out.println("该元素的索引:"+Arrays.binarySearch(mylist1, 3.4)); //0;排序的结果作用在数组上
    
            
            //元素填充用full
            Arrays.fill(mylist1, 0,2, 100);//将0-2的元素替换为100
            System.out.println("元素填充用Arrays.full():"+Arrays.toString(mylist1));
    
           
            // 打印所有的数组元素
           for(double element:mylist1){
               System.out.println(element);
           }
    
           //将数组转化为列表
           int[] a12 = {3,5,1,9,7};
           List<int[]> list = Arrays.asList(a12);
           System.out.println(" Arrays.asList将数组转化为列表:"+list);
           System.out.println(" return打印:"+reverse(b));
           //多维数组的创建
           int a11[][] = new int[2][5];//初始化a11为2行2列
           //下方赋值给二维数组报错 Array constants can only be used in initializers
        //    a11[0] = {1,2};//报错:数组常量只能在初始化器中使用
        //二维数组赋值的话应该像矩阵一样数格子定位
    
        //    dataType[] arrayRefVar = new dataType[arraySize]; 创建数组但报错没有dataType类型
           //调用方法又怎么打印出来呢
    
    
    
    
    
    
           //我传入变量进去还报错:Index 2 out of bounds for length 2
        //    printArry(b);//好吧,方法传递的参数最好是变量
           reverse(b); //这里我同样不知道如何把变量赋值,list类型标记不是dataType[]么
        }
           //数组作方法入参
           public static void printArry(int[] array){
               for(int i=0;i<=array.length;i++){
                   System.out.print(array[i]+"");//这是打印在一行
               }
           }
    
           //数组作返回值
           public static int[] reverse(int[] list){
               int[] result = new int[list.length];
               for(int i = 0,j = result.length-1;i<list.length;i++,j--){
                   result[j] = list[i];//倒序列表 Arrays.asList将数组转化为列表
               }
               return result;
           }
    
        
    }
    
    
    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    求循环小数
    Android中Intent的用法总结
    Java中@Override的作用
    三种继承方式和访问控制方式对子类成员的影响
    设计一个用于人事管理的People(人员)类
    QSort函数对不同类型数据快速排序浅谈
    QSQLITE 使用
    c++控制内存分配
    dll加载过程全局变量会先初始化
    二维数组
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15084501.html
Copyright © 2011-2022 走看看