首页 > 编程语言 >javaSE基础-数组

javaSE基础-数组

时间:2022-11-22 22:13:34浏览次数:39  
标签:arr int 基础 length 数组 new javaSE data

数组

数组的简述

1、数组:是多个相同类型数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行同一管理

2、数组的相关概念:
数组名
元素
角标、下标、索引
数组的长度:元素的个数

3、数组的特点:
数组是序排列
数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
创建数组对象会在内存开辟一块连续的空间
数组的长度一旦确定,就不可修改

4、数组的分类:
按维度:一维数组、二维数组。。。
按元素的类型:基本数据类型元素数组、引用数据类型元素数组

数组的使用

1、一维数组的初始化两种方式

int[] arr = new int[3]; //动态初始化
String[] arr2 = new String[]{"Mary", "Jerry", "Tim"}; // 静态初始化

注:数组一旦初始化,其长度不可变(arr.length),长度确定就不可修改。

2、二维数组初始化的两种方式

int[][] arr1 = new int[][]{{1,2,3},{45,67,89}}; // 静态初始化
int[][] arr2 = new int[3][4]; //动态初始化
int[][] arr3 = new int[3][];  //动态初始化

二维数组内外层的注意事项

image

数组定义格式
一维数组:int[] x 或者 int x[]
二维数组:int[][] y 或者 int[] y[] 或者 int y[][]

数组-1

3、遍历二维数组

int[] arr = new int[][]{{1,2,3}, {2,1}, {7,3,6}};

for(int i=0; i<arr.length; i++){
	for(int j=0; j<arr[i].length; j++){
		System.out.print(arr[i][j] + "\t");
	}
	System.out.println();
}

4、不同类型的一维数组元素的默认初始化值

整型:0
浮点型:0.0
Boolean:false
Char:0 或 \u0000
引用类型:null

5、一维数组的内存解析

一维数组内存解析

6、二维数组的内存解析

二维数组内存解析

7、数组使用常见异常

  • 数组角标越界:ArrayIndexOutOfBoundsException
int[] arr = new int[]{1,2,3,4};
for (int i = 0; i <= arr.length; i++) {
	System.out.println(arr[i]); //报错:ArrayIndexOutOfBoundsException
}

System.out.println(arr[-1]); //报错:ArrayIndexOutOfBoundsException
  • 空指针异常:NullPointerException
//情况一
int[] arr2 = new int[]{1,2,3};
arr2 = null;
System.out.println(arr2[0]); //报错:NullPointerException

//情况二
int[][] arr3 = new int[4][];
System.out.println(arr3[0][0]); //报错:NullPointerException

//情况三
String[] arr4 = new String[]{"AA","B","C"};
arr4[0] = null;
System.out.println(arr4[0].toString()); //报错:NullPointerException

Arrays工具类的使用

java.util.Arrays类为操作数组的工具类,包含用来操作数组的各种方法

1、常用方法

Arrays工具方法

示例

public class ArraysTest {
    public static void main(String[] args) {
        int[] arr1 = new int[]{1,22,33,44};
        int[] arr2 = new int[]{1,33,22,44};

        //equal()
        boolean b = Arrays.equals(arr1, arr2);
        System.out.println(b); //false

        //toString()
        System.out.println(Arrays.toString(arr1)); //[1, 22, 33, 44]

        //fill()
        Arrays.fill(arr1, 10);
        System.out.println(Arrays.toString(arr1)); //[10, 10, 10, 10]

        //sort():使用快排
        Arrays.sort(arr2);
        System.out.println(Arrays.toString(arr2)); //[1, 22, 33, 44]

        //binarySearch():使用二分查找
        int index = Arrays.binarySearch(arr2, 22);
        System.out.println("22在数组arr2索引位置" + index); //1
    }
}

2、数组基本操作 - 最大值、最小值、求和、平均值、复制、反转、排序、遍历、查找

click me
public class ArrayUtil {

    //求数组的最大值
    public int getMax(int[] arr) {
        int maxValue = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > maxValue) {
                maxValue = arr[i];
            }
        }
        return maxValue;
    }

    //求数组的最小值
    public int getMin(int[] arr) {
        int minValue = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (minValue > arr[i]) {
                minValue = arr[i];
            }
        }
        return minValue;
    }

    //求数组的和
    public int getSum(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }

    //求数组的平均值
    public double getAverage(int[] arr) {
        DecimalFormat df = new DecimalFormat("0.00");
        String ave = df.format(getSum(arr) / arr.length);
        return new Double(ave);
    }

    //数组的复制
    public int[] copyArray(int[] arr) {
        int[] newArr = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        return newArr;
    }

    //反转数组
    public void reverse(int[] arr) {
        for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

    //数组排序(从小到大)
    public void sortArray(int[] arr) {
        //冒泡排序
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }

    }

    //数组遍历
    public void printArray(int[] arr){
        System.out.print("[");
        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + ",");
            if(index == arr.length -1){
                System.out.print(arr[i]);
            }
            index++;
        }
        System.out.print("]" + "\n");
    }

    //查找指定元素
    public int getIndex(int[] arr, int dest){
        int index = -1;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == dest){
                index = i;
                return index;
            }
        }
        return index;
    }
}

数组与算法

数据结构

1、数据间的逻辑关系:集合、一对一、一对多、多对多

2、数据的存储结构

线性表:顺序表(如:数组)、链表、栈(先进后出)、队列(先进先出)

树型结构:二叉树

图形结构

数组中常用算法

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

2、求数值型数组中的最大值、最小值、平均数等

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

4、数组元素的排序算法

排序算法

排序算法的概念

排序算法分类

排序算法分类

排序算法的性能比较
image

十大内部排序算法

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

示例一:冒泡排序

int[] arr = new int[]{23,4,565,23,65,-34,0,123};

for(int i=0; i<arr.length -1; i++){
    for(int j=0; j<arr.length - 1 -i; j++){ // 每一轮交换的次数:arr.length - 1 -i
        if(arr[j] > arr[j+1]){
            int tmp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = tmp;
        }
    }
}

示例二:快速排序

private static void subSort(int[] data, int start, int end){
    if(start < end){
        int base = data[start];
        int low = start;
        int high = end + 1;
        while(low < end && data[++low] - base <= 0);
        while(high > start %% data[--high] - base >= 0);
        if(low < high){
            swap(data, low, high)
        }else{
            break;
        }
    }
    swap(data, start,high);
    subSort(data, start, high-1);
    subSort(data, high+1, end);
}

private static void swap(int[] data, int i, int j){
    int tmp = data[i];
    data[i] = data[j];
    data[j] = tmp;
}

标签:arr,int,基础,length,数组,new,javaSE,data
From: https://www.cnblogs.com/bione/p/16815019.html

相关文章

  • Python基础之数据库:1、数据库发展史及常用数据库的介绍
    Python基础之数据库目录Python基础之数据库一、储存数据演变史1、文本文件2、软件开发目录规范3、数据库二、数据库软件应用史三、数据库的本质四、数据库的分类1、关系......
  • 152. 乘积最大子数组(经典dp)
    给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个 32-位 整数。子数组......
  • 【JAVA笔记】jJAVA入门基础02
     一.符号及类型1.1添加注释comment注释:就是对代码的解释和说明。其目的是让人们能够更加轻松地了解代码。为代码添加注释,是十分必须要的,它不影响程序的编译和运行......
  • Java基础题
    Java基础题1.Java面向对象有哪些特征继承、封装、多态三大特征相互相乘封装:封装内部的一些实现机制,就跟方法封装一些实现的机制一样继承:就是从已有的类派生出新的类,新......
  • 384. 打乱数组(洗牌算法)
    给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是 等可能 的。实现 Solution class:Solution(int[]nums) 使用整数数......
  • Java基础
    java基础一.java注释1.单行注释:////这是单行注释2.多行注释:/*注释内容*//*这是多行注释这是多行注释*/3.文档注释(JavaDoc):/**注释内容*//***@......
  • 448. 找到所有数组中消失的数字(鸽笼原理)
    给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1,n] 内。请你找出所有在 [1,n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 示......
  • 关于Spring注解的基础详解(补充上次并不清楚的内容)
    注解,需要在.xml文件里面加这么一句话:<context:component-scanbase-package=""/>(组件)Component注解主要用于接口的实现类里面,代替掉.xml文件里面的这句话:(主要作用:代替......
  • 大前端html基础学习
    根目录相对路径:针对图片数量比较多的情况,新建一个文件夹,将所有图片放进去,imgs/cat.webp(1)/:下一级(2)a/b/c/cat.webp返回路径(向外找):从下一级html中找上级或上上级的图片,走......
  • Git基础使用
    1、Git工作流程workspace:工作区,平时开发改动代码的地方,这个地方的代码是最新的Index:暂存区,通过gitadd.命令会将代码存放到暂存区Repository:本地仓库,通过gitcomm......