zoukankan      html  css  js  c++  java
  • JAVA---数组

    一维数组本质上是一组相同类型的线性集合,当在程序需要处理一组数据,或者传递数据时,可以应用这种类型的数组。

    创建一维数组:数组作为对象允许使用new关键字进行分配内存。在使用数组之前,必须首先定义数组变量所属类型。

    1:int arr[];     //声明int型数组,数组中的每个元素都是int型。

    String  str[];       //声明string型数组,数组中的每个元素都是String型。

    声明了数组只是给出了数组名字和元素的数据类型,要想真正使用数组,还要为它分配内存空间。在为数组分配内存时,必须指明数组的长度。

    数组名字 =new  数组元素类型[数组元素的个数];        arr=new int[5];

    数组是通过下标来区分数组中的不同元素,数组的下标是从0开始的。

    2:声明数组的同时为数组分配内存。

    数组元素类型      数组名=new 数组元素类型[数组元素的个数];

    int month=new int[2];

    初始化一维数组:

    int arr=new int[]{1,3,2,5,8};

    int arr={1,3,2,5,8};

    eg:

    public class GetDay(){

              public static void main(String[]args){

                          int day=new int[]{31,28,30,31};

                          for(int i=0;i<day.length,i++){

                             System.out.println("day[i]");

                                }

    }

    }

    二维数组的创建及使用

    如果一维数组中的各个元素仍然是一个数组,那么它就是一个二维数组。二维数组常用于表示表中的信息以列和行的形式组织,第一个下标代表元素所在行,第二个下标代表元素所在的列。

    二维数组可以看作是特殊的一维数组,因此,二维数组的创建同样有两种方式。

    1:先声明,再用new运算符进行内存分配。

    数组元素类型    数组名字[][];

    数组元素类型 [][]   数组名字;

    int arry[][];

    同一维数组一样,二维数组在声明时也没有分配内存空间,同样要使用new关键字来分配内存,然后才可以访问每个元素。

    对于高维数组,有两种为数组分配内存的方式:

    (1)直接为每一维分配内存空间。

    a=new int[2][4]

    分别为每一维分配内存,

    a=new int[2][];

    a[0]=new int[2];;

    a[1]=new int[3];

    (2):声明的同时为数组分配内存

    第二种方式同第一种实现的相同功能。使用方式为二维码数组分配内存时,首先指定最左边维数的内存,然后单独地给余下的维数分配内存。

    二维数组初始化:

    type arryname[][]={value1,value2.....valuen};

    int arryname[][]={{1,2},{45,10}};

    使用二维数组:

    public  class Matrix{

                 public  static void main(String[]args){

                             int a[][]=new int[3][4];

                             for(int i=0;i<a.length;i++){

                                    System.out.println(a[i][j]);

                                             }

                              }

    }

    对于整型二维数组,创建成功之后系统会赋给数组中每个元素初始值0.

    数组的基本操作:

    1:遍历数组

    遍历二维数组使用双层for循环。

    public  class Trap{

                public  static void main(String[]args){

                             int b[][]=new int[][]{{1},{2,3},{4,5,6}};

                             for(int k=0;k<b.length;k++){

                                             for(int j=0;j<b[k].length;j++){

                                                  System.out.println(b[k][j]);

                                                                       }

                                              }

                              }

    }

    在遍历数组时使用foreach语句可能会更简单。

    public  class Tautog{

                 public  static  void main(String[]args){

                                       int b[][]=new int[][]{{4,3},{1,2}};

                                       System.out.println("数组中的元素是:");

                                       for(int x[]:b){

                                                   for(int y[]:x){

                                                           if(x==b.length){

                                                                       System.out.println(y);

                                                                           }

                                                              else

                                                                      System.out.println(e+"\");

                    }

                  }

                     }

       填充替换数组元素

    数组中的元素定义完成之后,可通过arry类中fill来对数组中的元素进行替换。该方法通过重载形式可完成任意类型的数组元素的替换。

    fill(int a[],int value):   a为要替换元素的数组,Value为要进行替换的数据。将指定的int值分给数组中的每一个元素。

    import java.util.Arrays;

     public  class Swap{

                 public  static  void  main(String[]args){

                            int arr[]=new int[5];

                            Array.fill(arr, 8);

                           for(int i=0;i<arr.length;i++){

                                   System.out.println(arr[i]);

                                                 }

                            }

    }

    fill(int []a,int fromIndex,int toIndex,int value);                 该方法将指定的int值分配给指定范围中的每一个元素。如果fromIndex==toIndex,则填充范围为空。

    import  java.util.Arrays;

    public class  Displace{

                public  static void main(String[]args){

                            int arr[][]=new int[][]{45,12,2,10};

                            Array.fill(arr,1,2,8);

                            for(int i=0;i<arr.length;i++){

                                          System.out.println(arr[i]);

                                               }

                              }

    }

    对数组进行排序:

    通过Arrays类静态 sort()方法可以实现对数组的排序。sort()方法提供了多种重载形式,可以对任意类型的数组进行升序排序。

    Array.sort(object)

    import  java.util.Arrays;

    public  class Taxis{

                public  static  void main(String[]args){

                            int arr[]={23,42,12,8};

                            Arrays.sort(arr);

                             for(int i=0;i<arr.length;i++){

                                     System.out.println(arr[i] );

                                            }

                             }

    }

    上述实例是对整形数组进行排序。java中的string类型数组的排序算法是根据字典编排顺序排序的。因此数字排在字母前面,大写字母排在小写字母前面。

    复制数组:

    Arrays类的copyOf()方法与copyOfRange() 方法可以实现对数组的复制,copyOf()是复制数组至指定的长度,copyOfRange()方法则将数组指定长度复制到一个新的数组中。

    copyOf(arr,int newlength);

    arr:要进行复制的数组;     newlength:指复制后的长度。如果新数组的长度大于数组arr的长度,则用0进行填充(根据复制数组的类型来决定填充的值,整型数组决定用0来填充的,char型数组则使用null来填充)。如果复制后的数组长度小于数组arr的长度,则会从数组arr的第一个元素开始截取满足新数组长度为止。

    eg:

     import java.util.Arrays;

     public  class Cope{

                  public static void main(String[]args){

                               int arr[]=new int[]{23,42,12};

                               int newarr[]=Arrays.copyOf(arr,5);

                               for(int i=0;i<newarr.length;i++){

                                          System.out.println(newarr[i]);

                                                       }

                                  }

    }

    copyOfRange()方法:      copyOfRange(arr,int fromIndex,int toIndex);   arr:要进行复制的数组对象。fromIndex:指定开始复制数组的索引位置。fromIndex必须在0至整个数组长度之间。新数组包括索引fromIndex的元素。  toIndex:要复制范围的最后索引位置。可大于数组arr的长度。新数组不包括索引是toIndex的元素。

    eg:

    import java.util.Arrays;

    public class Repeat{

               public  static  void main(String[]args){

                            int arr[]=new int[]{23,42,12,84,10};

                            int newarr[]=Array.copyOfRange(arr,0,3);

                          for(int i=0;i<newarr.length;i++){

                                     System.out.println(newarr[i]);

                                           }

                        }

    }

    }

      数组查询

    Arrays类的binarySearch()方法,可使用二分搜索法来搜索指定数组,以获得指定对象,该方法返回要搜索元素的索引值。binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要,binarySearch()方法有两种参数类型。

    1:binarySearch(Object[]a.Object key)

           a:要搜索的数组。key:要搜索的值。

    如果key在数组中,则返回索引值,否则返回-1或“-”插入点,插入点是搜索要插入数组的那一点,即第一个大于此键的元素索引。

    int arr[]=new int[]{4,25,10};

    Arrays.sort(arr);

    int index=Arrays.binarySearch(arr,0,1,8);

    上面代码中的变量index的值的元素“8”在数组arr中索引在0~1内的索引位置。由于在指定范围并不存在元素“8”,Index的值是“-”(插入点)。如果对数组进行排序,元素“8”应该在25前面,因此插入点应是元素:25的索引位置“2”,即index的值为-2;

    如果数组中的所有元素都小于指定的键值,则为a.length

    (必须对数组进行排序,否则结果是不正确的)

    eg:

    import java.util.Arrays;

    public class Example{

               int a[]=new int[]{1,8,9,4,5};

               Arrays.sort(a);

               int index=Arrays.binarySearch(a,4);

              System.out.println("4的索引位置是:"+index);

                         }

    }

    返回值为:1

    (2)  binarySearch(Object[].a,int fromIndex,int toIndex,Object key)

    a:要进行检索的数组 fromIndex:起始位置(包含)   toIndex:结束位置(不包含)      key:要搜索的元素

    如果数组中所有的元素都小于指定的键值,则为toIndex.

    如果指定的范围大于或等于数组的长度,则会报ArrayIndexOfBoundException异常

    eg:

    import java.util.Arrays;

    public class Rakel{

              public  static void main(String[]args){

                        String str[]=new String[]{"ab","cd","ef","yz");

                        Arrays.sort(str);

                        int index=Arrays.binarySearch(str,0,2,"cd");

                        System.out.println(“cd的索引位置:”+index);

                                   }

    }

    数组排序算法

    1:冒泡排序

    冒泡排序的基本思想就是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移到数组前面,把较大的元素移到数组后面(即为交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。

    eg:

    public class BubbleSort{

                public static void main(String[]args){

                          int arr[]={63,4,24,1,3,15};

                          BubbleSort soter=new BubbleSort();

                          soter.sort(arr);

                                   }

                           public void sort(int[]arr){

                                     for(int i=1;i<arr.length;i++){

                                         for(int j=0;j<arr.length-i;j++){

                                                     if(arr[j]>arr[j+1]){

                                                             int a;

                                                             a=arr[j],arr[j]=arr[j+1],arr[j+1]=a;

                                                                            }

                                                            }

                                                }

    showArray(arr);

                               }

    public void showArray(int[]arr){

                                for(int x:arr){

                                                  System.out.println(">"+x);

                                                       }

                                          System.out.println();

                                              }

    }

    运行结果:>1>3>15>24>63

    直接选择排序:

    基本思想:将指定排序位置与其他数组元素分别进行比较,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素于指定元素的顺序位置交换。

    eg:

    public class SelectSort{

                public  static void main(String[]args){

                            int arr[]={63,4,24,1,3,15};

                            SelectSort sorter=new SelectSort();

                           sorter.sort(arr);

                             }

                    public void sort(int[]arr){

                             for(int i=1;i<arr.length;i++){

                                      int      index;

                                    for(int j=1;j<arr.length-i;j++){

                                                   index=0;

                                               if(arr[j]>arr[index]){

                                                     index=i;

                                                             }

                                                   int temp=arr[arr.length-i];

                                                   arr[arr.length-i]=arr[index];

                                                   arr[index]=temp;

                                                          }

                                  showArray(arr);

                                                      }

    public void showArray(int[]arr){

                       for(int i:arr){

                             System.out.println(">"+i);

                                    }

                 System.out.println();

                         }

    }

    反转排序

    思路就是把数组最后一位与第一位替换,倒数第二个元素与第二个元素替换,以此类推,直到把所有数组元素反转替换。

    eg:

      public  class ReserverSort{

                  public static void main(String[]args){

                            int arr[]={10,20,30,40,50,60};

                             ReserverSort  sorter=new ReserverSort();

                            sorter.sort(arr);

                                   }

                 public void sort(int[]arr){

                                    System.out.println("数组原有的内容:");

                                     showArray(array);

                                     int temp;

                                     int len=arr.length;

                                     for(int i=0;i<len/2;i++){

                                                        temp=arr[i];

                                                         arr[i]=arr[len-1-i];

                                                          array[len-1-i]=temp;

                                                                     }

                                        System.out.println("数组反转内容:");

                                        showArray(arr);

                                         }

                                     public void  showArray(int[]arr){

                                                for(int i:arr){

                                                        System.out.print(" "+i);

                                                                }

                                                        System.out.println();

                                                           }

                                           }

               

                                                            i

                                                                    

  • 相关阅读:
    Codeforces Round #401 (Div. 2)解题报告
    ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) 解题报告
    (线段树)hdoj 3308-LCIS
    Codeforces Round #399 (Div. 1 + Div. 2, combined) D题Jon and Orbs(dp)解题报告
    2019 Multi-University Training Contest 1
    2019 Multi-University Training Contest 6
    2019牛客暑期多校训练营(第八场)
    模板
    2019 Multi-University Training Contest 8
    2019 Multi-University Training Contest 9
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/7425566.html
Copyright © 2011-2022 走看看