数组笔记总结

目录

 

一、数组

1.数组的概述

1.数组的理解

2.数组相关的概念:

3.数组的特点:

4.数组的分类:

2.一维数组的初始化

3.二维数组的初始化

*4.遍历二维数组

5.不同类型的数组元素的默认初始化值

i.一维数组

ii.二维数组

6.一维数组的内存解析​

7.数组中涉及的常见算法

i. 数组元素的赋值(杨辉三角、回形数等)

ii.求数值型数组中元素的最大值、最小值、平均数、总和等

***获取随机数的方法

iii.数组的复制、反转、查找(线性查找、二分法查找)

*iv. 数组元素的排序算法( 冒泡排序、快速排序)

8. Arrays工具类的使用

9.数组使用中的常见异常


一、数组

1.数组的概述

1.数组的理解

数组(Array),是多个相同类型数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对琼些数据进行统一管理。

2.数组相关的概念:

数组名 元素 角标、下标、索引 数组的长度:元素的个数

3.数组的特点:

1数组是序排列的 2数组属于引用数据类型的变量。

3.数组的元素,既可以是基本数据类型,也可以是引用数据类型3创建数组对象会在内存中开辟一整块连续的空间 4.数组的长度一旦确定,就不能修改。

4.数组的分类:

照维数: 一维数组、二维数组... 照数组元素的类型: 基本数据类型元素的数组、引用数据类型元素的数组

2.一维数组的初始化

数组一旦初始化,其长度就是确定的。

数组的长度一旦确定,就不可修改。

  //一维数组的初始化
        //动态初始化
        int[] Arr = new int[5];
        //静态初始化
        String[] arr = new String[]{"Tom","Mike","Lily"};
 

3.二维数组的初始化

//二维数组的初始化
//静态初始化
int[][]arr1=new int[][]{{1,2},{2,3},{3,4}};
//动态初始化
int[][]arr2 =new int[4][5];
int[][]arr3=new int[6][];

*4.遍历二维数组

   //二维数组的遍历
​
        int[][]arr1=new int[][]{{1,2},{2,3},{3,4}};
        for(int i=0;i<arr1.length;i++){
            for(int j=0;j<arr1[i].length;j++)
         System.out.println(arr1[i][j]+"\n");
        }

5.不同类型的数组元素的默认初始化值

i.一维数组

整型:0

浮点型:0.0

char类型:0

boolean类型:false

引用类型:null

ii.二维数组

//规定:二维数组分为外层数组的元素,内层数组的元素
int[][] arr = new int[4][3];
​
//外层元素:anr[0], arr[1]等
//内层元素:arx[0][1],anr[1][2]等
​
//数组元素的默认初始化值
//针对于初始化方式一:比如: 
int[][ ]arr = new int[4][3];
/*外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同*/
//针对于初始化方式二:比如:
int[][]arr = new int[4][];
/*外层元素的初始化值为:nul1
内层元素的初始化值为:不能调用,否则报错。*/

6.一维数组的内存解析

7.数组中涉及的常见算法

1.数组元素的赋值(杨辉三角、回形数等) 2.求数值型数组中元素的最大值、最小值、平均数、总和等 3.数组的复制、反转、查找(线性查找、二分法查找) 4.数组元素的排序算法

i. 数组元素的赋值(杨辉三角、回形数等)

ii.求数值型数组中元素的最大值、最小值、平均数、总和等

***获取随机数的方法

  //  获取10个任意的两位数
  //两位数的范围是10-99 (a——b)
  //获取随机数的公式为:(int)(Math.random()*(b-a+1)+a);
  int[]arr=new int[10];
for(int i=0;i<arr.length;i++){
    arr[i]=(int)(Math.random()*(99-10+1)+10);
}

iii.数组的复制、反转、查找(线性查找、二分法查找)

a.数组的复制

package text;
​
public class arrtext {
    public static void main(String[]args){
        //  获取10个任意的两位数
        //两位数的范围是10-99 (a——b)
        //获取随机数的公式为:(int)(Math.random()*(b-a+1)+a);
        int[]arr1=new int[10];
        for(int i=0;i<arr1.length;i++) {
            arr1[i] = (int) (Math.random() * (99 - 10 + 1) + 10);
            System.out.print(arr1[i]);
        }
​
        System.out.println("-------------");
        
        //把arr1数组赋值给arr2数组
        int  arr2[]=new int[arr1.length];
        for(int i=0;i<arr1.length;i++){
            arr2[i]=arr1[i];
            System.out.print(arr1[i]);
        }
    }
​
}

b.数组的反转

package text;
​
public class arrtext {
    public static void main(String[]args){
     String[]arr1=new String[]{"AA","BB","CC","DD","EE","FF"};
     for(int i=0;i<arr1.length;i++){
         System.out.print(arr1[i]);
     }
        System.out.println("-------------");
​
        //数组的反转
//        方式一:
        for(int i=0,j=arr1.length-1;i<j;i++,j--){
          String temp=arr1[i];
          arr1[i]=arr1[j];
           arr1[j]=temp;
        }
        for(int i=0;i<arr1.length;i++){
            System.out.print(arr1[i]);
        }
​
        
​
    }
}

c.数组的查找

线性查找

字符串是否相等,不能用==直接来判断,可以使用 字符串.equals()方法

package text;
​
public class arrtext {
    public static void main(String[]args){
     String[]arr1=new String[]{"AA","BB","CC","DD","EE","FF"};
     for(int i=0;i<arr1.length;i++){
         System.out.print(arr1[i]);
     }
        System.out.println("-------------");
​
     String a="FF";
     //这里可以通过 boolean isFlag来判断循环进行等。
     boolean isFlag=true;
     for(int i=0;i<arr1.length;i++){
         //e属于字符串,不能直接用“=”等号,所以需要使用equals
         if(a.equals(arr1[i])){
             System.out.print("找到了元素FF的位置,它的位置在:"+i);
             isFlag = false;
             break;
         }
     }
        if(isFlag) {
            System.out.print("没有找到了元素FF的位置");
        }
    }
}

二分法查找

package text;
​
public class arrtext {
    public static void main(String[] args) {
        int[] arr1 = new int []{1,3,5,7,9,11,13,15,17,19,21};
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i]);
        }
        System.out.println("-------------");
​
       int a=11;
       int head=0;
       int end=arr1.length-1;
    boolean isFlag=true;
        
  while(head<end){
    int middle=(head+end)/2;
      //注意这里,要比较的是arr1[middle],而不是普通的middle
    if(a==arr1[middle]) {
        System.out.println("找到要找到的元素了,他的位置是:" + middle);
        isFlag=false;
        break;
    }
    if(a<arr1[middle]){
        end=middle-1;
    }
    else{
        head=middle+1;
    }
}
while(isFlag){
    System.out.println("没有找到要找到的元素了");
}
}
    }

*iv. 数组元素的排序算法( 冒泡排序、快速排序)

十大排序算法

选择排序: 直接选择排序、堆排序 交换排序: 冒泡排序、快速排序 插入排序: 直接插入排序、折半插入排序、Shell排序 归并排序: 桶式排序: 基数排序:

算法概述

算法的五大特性:

输入( input ) 输出( output ) 有穷性(有限性,Finiteness ) 确定性(明确性,Definiteness ) 可行性(有效性,Effectiveness )

冒泡排序:

算法思想:

相邻两个元素之间进行比较,每一轮都会确定一个最大的元素,一共需要比较数组长度-1轮,才能够确定最终的排序顺序。(大轮)

因为每轮都会确定一个最大的元素,所以后面已经确定的元素不用比较 ,所以这里内层的相邻元素的比较 的尾应该是数组长度-1-i(内层小轮)

package text;
​
public class arrtext {
    public static void main(String[] args) {
        int[] arr1 = new int[]{9,45,1,56,89,29,21,2,34,8};
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i]+"   ");
        }
        System.out.println("-------------");
        //冒泡排序
        //算法思想:相邻两个元素之间进行比较,每一轮都会确定一个最大的元素,一共需要比较数组长度-1轮,才能够确定最终的排序顺序
        //大轮循环排序
        for(int i=0;i<arr1.length-1;i++){
          //内层之间相邻两个元素进行对比
            //因为每轮都会确定一个最大的元素,所以后面已经确定的元素不用比较 ,所以这里内层的相邻元素的比较 的尾应该是arr1.length-1-i
            for(int j=0;j<arr1.length-1-i;j++){
                //相邻两个元素进行比较
                if(arr1[j]>arr1[j+1]){
                   int temp= arr1[j+1];
                   arr1[j+1]=arr1[j];
                   arr1[j]=temp;
                }
            }
        }
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i]+"   ");
        }
    }
}

快速排序:2的n次方

8. Arrays工具类的使用

1boolean equals(int[a,int[] b)判断两个数组是否相
2String toString(int[]a)输出数组信息。
3void fill(int[]a,int val)将指定值全部替换到数组之中。
4void sort(int[]a)对数组进行排序。
5int binarySearch(int[]a,int key)对排序后的数组进行二分法检索指定的值。
package text;
​
import java.util.Arrays;
​
public class arrtext {
    public static void main(String[] args) {
        int[] arr1 = new int[]{9,45,1,56,89,29,21,2,34,8};
        int[] arr2 = new int[]{1,45,9,56,89,29,21,2,34,8};
​
      //|  1   | boolean     equals(int[a,int[] b)    | 判断两个数组是否相                     |
        boolean isFlag=Arrays.equals(arr1,arr2);
        System.out.println(isFlag);
        System.out.println("——————————");
​
        //|  2   | String toString(int[]a)          | 输出数组信息。                         |
        Arrays.toString(arr1);
        System.out.println( Arrays.toString(arr1));
        System.out.println("——————————");
​
        //|  3   | void fill(int[]a,int val)        | 将指定值替换到数组之中。               |
         Arrays.fill(arr2,10);
        Arrays.toString(arr2);
        System.out.println( Arrays.toString(arr2));
        System.out.println ("——————————");
​
        //|  4   | void sort(int[]a)                | 对数组进行排序。                       |
        Arrays.sort(arr1);
        Arrays.toString(arr1);
        System.out.println( Arrays.toString(arr1));
        System.out.println ("——————————");
​
        //|  5   | int binarySearch(int[]a,int key) | 对排序后的数组进行二分法检索指定的值。 |
       int a= Arrays.binarySearch(arr1,9);
       //这里使用if是因为,如果数组中没有找到这个元素的位置时,就会输出负数,所以为了让大家直观地看到这种情况,我们在找不到时,进行 输出语句提示。
       if(a>=0){
           System.out.print("a元素的位置在:"+a);
       }else{
           System.out.print("该序列中没有找到该元素。");
       }
    }
}

9.数组使用中的常见异常

1.数组角标越界的异常: ArrayIndexOutOfBounasEXcet1on

长度为[0——arr.length-1]

2.空指针异常: NullPointerException

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值