数组学习

1.数组的概念与初始化

1.1概念

  • 数组是一种线性表数据结构,它用一组连续的内存空间存储相同类型的数据,所以数组就是一组相同类型的变量集合,并且这些变量可以按照统一的方式进行操作。

1.2数组初始化

  • 数组的初始化就是为数组开辟连续的内存空间,并为每个数组元素赋予值。数组的初始化可以分为两类,一种是动态初始化,另一种是静态初始化。动态初始化即首先开辟空间,然后再根据索引进行内容的设置;静态初始化即在数组定义的时候同时设置内容。

1.2.1 数组的动态初始化

  数组类型[] 数组名 = new 数组类型[数组长度] ;

  • 数组的访问
      数组名[索引]
      数组的索引是从0开始,所以索引的范围是0~(数组长度-1),如果访问时超出了索引范围,会报java.lang.ArrayIndexOutOfBoundsException异常信息。
      若初始化后,不对数组进行赋值,那么数组里的每个元素都是该数组类型的默认值。
  • 如下代码所示,先初始化了一个int类型长度为3的数组data,然后分别给data的每一项赋值,最后输出每一项。
public class ArrayInit {
    public static void main(String[] args){
            int[] data = new int[3];
            data[0] = 0;
            data[1] = 1;
            data[2] = 2;
            for (int i = 0; i < data.length; i++) {
                System.out.println("第"+i+"个:"+data[i]);
            }
    }
}
第0个:0
第1个:1
第2个:2

1.2.2数据静态初始化

  数组类型[] 数组名 = {值,值,...}

public class ArrayInit {
    public static void main(String[] args){
         //静态初始化
        int[] data = {1,2,3,4,5,6,7,8,9,0};
        for(int i = 0; i < data.length; i++) {
            System.out.print(data[i]);
        }
    }
1234567890

1.3二维数组

  • 如果说一位数组像是一行变量,那么二维数组就是两行变量。
  • 二维数组的初始化
      动态初始化:数据类型[][] 数组名称 = new 数据类型[行数][列数];
      动态初始化:数据类型[][] 数组名称 = new 数据类型[][]{{值,值,值,...},{},...};
public class ArrayInit {
    public static void main(String[] args){
        int[][] data = new int[][]{{1,2,3,4},{5,6,7,8}};
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                System.out.print(data[i][j]);
            }
        }
    }
}
12345678

2.数组的操作

2.1比较两个数组是否相等

public class equalsArray {
    public  static void main(String[] args){
        double[] score1 = {99,100,89,67,50};
        double[] score2 = {99,100,89,67,50};
        double[] score3 = {99,100,89,99,50};

        if(Arrays.equals(score1,score2)){
            System.out.println("score1与score2相等");
        }else{
            System.out.println("score1与score2不相等");
        }
        if(Arrays.equals(score1,score3)){
            System.out.println("score1与score3相等");
        }else{
            System.out.println("score1与score3不相等");
        }if(Arrays.equals(score2,score3)){
            System.out.println("score2与score3相等");
        }else{
            System.out.println("score2与score3不相等");
        }
    }
}

输出

score1与score2相等
score1与score3不相等
score2与score3不相等

2.2数组填充

Arrays提供了一个方法fill,可以在指定位置进行数值填充。虽然可以进行填充,但是只能使用同一个数值进行填充。

public class FillArray {
    public static void main(String[] args){
        int[] data = new int[4];
        System.out.println("一共有"+data.length+"个元素");
        for (int i = 0; i < data.length; i++) {
            Arrays.fill(data,i);
            System.out.println("第"+i+"个,内容为"+data[i]);
        }
    }
}
一共有4个元素
第0个,内容为0
第1个,内容为1
第2个,内容为2
第3个,内容为3

2.3数组查找

  • 从数组中查询指定位置的元素或查询某元素在指定数组中的位置。Arrays中有binarySearch()方法可以实现数组的查找,binarySearch() 方法有多种重载形式来满足不同类型数组的查找需要,常用的重载形式有两种。
  • (1)binarySearch(Object[] a,Object[] key);
      其中a为要搜索的数组,key为需要查找的值,如果存在,则返回索引值;否则返回-1或-插入点。在进行数组查询前,必须对数组进行排序,否则结果是不确定的;若存在多个key元素,无法确定返回的是哪一个。
  • (2)binarySearch(Object[] a,int fromIndex,int toIndex,Object key);
      其中a为要搜索的数组,key为需要查找的值,fromIndex指定范围的开始处索引(包含开始处),toIndex指定范围的结束处索引(不包含结束处)。
  • binarySearch(Object[] a,Object[] key);
    初始化data数组,进行sort排序,使用binarySearch查找对应key值的索引,注意此处查找的结果索引是排序后的,11对应的位置是7,而111不存在,返回的-10,10代表插入数组的位置,即第一个大于10的元素666的下一位。
public class BinarySearch {
    public static void main(String[] args){
        int[] data = {1,2,5,4,3,9,8,666,11,46};
        Arrays.sort(data);
        System.out.println("排序后的数组:");
        for (int i = 0; i 
排序后的数组:
1 2 3 4 5 8 9 11 46 666 查找11的位置是:7
查找111的位置是:-10
  • binarySearch(Object[] a,int fromIndex,int toIndex,Object key);
    初始化data数组,进行sort排序,使用binarySearch查找对应key值的索引,注意此处查找的结果索引是排序后的,在0-5的区间内查找11,不存在,则返回插入数组的位置,46是一个大于11的值,所以返回-6;在3-8的区间内查找111,找到111,返回索引7。
public class BinarySearch {
    public static void main(String[] args){
        int[] data = {1,222,5,4,3,9,8,666,111,46};
        Arrays.sort(data);
        System.out.println("排序后的数组:");
        for (int i = 0; i 
排序后的数组:
1 3 4 5 8 9 46 111 222 666 查找11的位置是:-6
查找111的位置是:7

2.4数组排序

2.4.1sort()方法

public static void main(String[] args){
        int[] data = {11,33,22,4,66,55,99,88,102};
        int[] result;
        sort(data);
        for (int i = 0; i < sort.length; i++) {
            System.out.println(sort[i]);
        }
    }
    public static void sort(int[] data){
        Arrays.sort(data);
    }
4 11 22 33 55 66 88 99 102 

2.4.2冒泡排序

public static void bubbleSort(int[] data){
        int n = data.length;
        for (int pass = n-1; pass >= 0; pass--) {
            for (int i = 0; i < pass; i++) {
                if(data[i]>data[i+1]){
                    int temp = data[i];
                    data[i] = data[i+1];
                    data[i+1] = temp;
                }
            }
        }
    }
4 11 22 33 55 66 88 99 102 

2.4.3快速排序

public static void quickSort(int[] data){
        if(data!=null){
            quickSort(data,0,data.length-1);
        }
    }
    private static void quickSort(int[] data,int beg,int end){
        if(beg>end || data ==null){
            return;
        }else{
            int p = partition(data,beg,end);
            quickSort(data,beg,p-1);
            quickSort(data,p+1,end);
        }
    }

    private static int partition(int[] data,int beg,int end){
        int first = data[beg];
        int i = beg, j = end;
        while (i < j) {
            while (data[i] <= first && i < end) {
                i++;
            }
            while (data[j] > first && j >= beg) {
                j--;
            }
            if (i < j) {
                data[i] = data[i] ^ data[j];
                data[j] = data[i] ^ data[j];
                data[i] = data[i] ^ data[j];
            }
        }
        if (j != beg) {
            data[j] = data[beg] ^ data[j];
            data[beg] = data[beg] ^ data[j];
            data[j] = data[beg] ^ data[j];
        }
        return j;
    }

2.4.4选择排序

public static void selectionSort(int[] data) {
        int n = data.length;
        int i, j, min, temp;
        for (i = 0; i < n-1; i++) {
                min = i;
            for (j = i+1; j < n; j++) {
                if(data[j]
4 11 22 33 55 66 88 99 102 

2.4.5插入排序

public static void insertSort(int[] data){
        int temp,j;
        int n = data.length;
        for(int i=1;i=0&&data[j]>temp;j--)
            {
                data[j+1]=data[j];
            }
            data[j+1]=temp;
        }
    }
4 11 22 33 55 66 88 99 102 

引用
https://blog.csdn.net/mrbacker/article/details/81638331
https://blog.csdn.net/qq_34988624/article/details/89360112
http://c.biancheng.net/view/919.html

你可能感兴趣的:(数组学习)