Java数组及排序

1、数组的概念

1)什么是数组?

数组是有序的元素序列。组成数组的各个变量称为数组的分量,也称为数组的元素,也成为下标变量。用于区分数组的各个元素的数字编号称为下标。

2)js中和Java中数组对比:

        js数组:数组没有数据类型限制,并且可以随意扩充

        Java数组:将相同数据类型的数据进行存储的数据格式。定容,统一数据类型

两者数组下标都是从0开始。

3)Java数组的特点:

a. Java数组是一种引用数据类型

b. Java数组中的数据类型必须统一

c. Java数组的长度是定长的(长度一旦确定就不能变)

d. 数组的重新赋值,只能通过标准格式,不能使用简略格式赋值

e. 初始化数组时如果没有直接赋值,那么数组中的元素默认值如下

        整数:0;浮点数:0.0;字符:'\u0000';布尔型:false;引用类型:null

f. 因为数组是定长的,如果像扩容,只能重新创建新的数组。

Arrays.copyOf(原始数组,长度)。

2、数组的定义

//定义有长度的数组

数据类型[] 数组变量 = new 数据类型[数组容量];

//定义有初始值的数组

数据类型[] 数组变量 = new 数据类型[]{数据1,数据2, ...};

//直接赋值创建(静态创建),定义和赋值必须写在一起

数据类型[] 数组变量 = {数据1,数据2, ...};

3、数组的使用

4、数组在内存中的存储方式

数组为引用数据类型,在堆中开辟一块连续的空间,数组变量在栈中定义,存储的是数组的起始地址。

5、数组的遍历

1)for+索引 遍历

2)for each 遍历

int[] nums = new int[5];
//for+索引  遍历
for(int i = 0; i < nums.length; i++){
    System.out.println(nums[i]);
}

//for each 遍历
for(int n : nums){
    System.out.println(n);
}

6、数组练习案例

public class Test4 {
    public static void main(String[] args) {
        //循环输入五个数,求和,平均值,最大值,最大值位置,最小值,最小值的位置
        Scanner scanner = new Scanner(System.in);
        int[] nums = new int[5];
        for (int i = 0; i < nums.length; i++) {
            System.out.println("请输入第"+(i+1)+"个数:");
            nums[i] = scanner.nextInt();
        }
        int sum = 0;
        int max = nums[0];
        int maxpos = 0;
        int min = nums[0];
        int minpos = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            if (max < nums[i]){
                max = nums[i];
                maxpos = i;
            }
            if (min > nums[i]){
                min = nums[i];
                minpos = i;
            }
        }
        System.out.println("最大值:"+max+";最大值所在位置:"+maxpos);
        System.out.println("最小值:"+min+";最小值所在位置:"+minpos);
        System.out.println("总和:"+sum+";平均值:"+(double)(sum / nums.length));
    }
}

7、排序算法

1)冒泡排序:N元数组冒泡排序,两两相比小的向前移,外层循环从1开始,内层循环减去i

public class Maopao {
    public static void main(String[] args) {
        //冒泡排序:N元数组冒泡排序,两两相比小的向前移,外层循环从1开始,内层循环减去i
        int[] nums = new int[]{12,23,10,67,24};
        System.out.println("冒泡排序后的数组为:");
        for (int n :
             nums) {
            System.out.print(n+"\t");
        }
        System.out.println();
        //比较的轮数,从1开始
        for (int i = 1; i < nums.length; i++) {
            //nums.length-i为比较的次数
            for (int j = 0; j < nums.length-i; j++) {
                //比较
                if (nums[j]>nums[j+1]){
                    //换位
                    int temp = 0;
                    temp = nums[j+1];
                    nums[j+1] = nums[j];
                    nums[j] = temp;
                }
            }
        }
        System.out.println("冒泡排序后的数组为:");
        for (int n :
             nums) {
            System.out.print(n+"\t");
        }
    }
}

2)选择排序:每轮排序都选择数据最小的那个元素(下标),与本轮排位第一的元素换位

public class Xuanze {
    public static void main(String[] args) {
        //选择排序:从小到大排序,每轮记录最小值的数组下标,使用数组下标将该位置上的元素与首位交换
        int[] nums = new int[]{12,34,67,10,4};
        System.out.println("选择排序前的数组为:");
        for (int n : nums) {
            System.out.print(n+"\t");
        }
        System.out.println();
        //控制轮数,以及首位的位置
        for (int i = 0; i < nums.length-1; i++) {
            int k = i;
            for (int j = k+1; j < nums.length; j++) {
                //通过比较,记录最小值的位置
                //如果k上的值比j上的大
                if (nums[k] > nums[j]){
                    //把j的值赋值给k。k总是指向最小值
                    k = j;
                }
            }
            //如果最小值的位置,和排位第一的位置不同,则换位
            if (k!=i){
                int temp = nums[i];
                nums[i] = nums[k];
                nums[k] = temp;
            }
        }
        //System.out.println(k);
        System.out.println("选择排序后的数组为:");
        for (int n : nums) {
            System.out.print(n+"\t");
        }
    }
}

8、Arrays工具类

1)Arrays.toString():将数组转成字符串输出,[数据1,数据2,……];

2)Arrays.sort():将数组进行排序,从小到大排序

3)Arrays.copyOf()数组扩容,数组是定长的,一旦确定,长度就不可变,若想改变数组长度,需要重新创建,copyOf将数组复制到一个新的数组中,可以增长也可以缩短,增长后的数组,剩余的数组元素内容为默认值。

9、对象数组

1)数组对象的创建:

创建一个长度为3的对象数组

Student[] stu = new Student[3];

2)对象数组的赋值:

stu[0] = new Student("name",age);

3)对象数组的遍历:

for+数组下标遍历

for each遍历

10、二维数组

1)二维数组的创建:

创建一个3行2列的二位数组

String[][] str = new String[3][2];

String[][] str = new String[][]{

        {"张三","李四"},

        {"王五","赵六"},

        {"黑伞","迪克"}

};

2)二维数组的遍历输出

//二维数组的定义
String[][] str = {
    {"张三","李四"},
    {"王五","赵六"},
    {"李维嘉","时代话"}
};
//二维数组的遍历输出
for(int i = 0;i<str.length;i++){
    for(int j = 0;j<str[i].length;j++){
        System.out.print(str[i][j]+" ");
    }
    System.out.println();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值