IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Java学习笔记 --- Arrays类 -> 正文阅读

[数据结构与算法]Java学习笔记 --- Arrays类

一、基本介绍

Arrays 里面包含了一系列的静态方法,用于管理或操作数组(比如排序和搜索)

二、Arrays类常见方法

1、toString:返回数组的字符串形式??

public class AttaysMethod01 {
    public static void main(String[] args) {
        Integer[] arr = {1, 9, 4};
        
        //直接使用 Arrays.toString() 显示数组
        System.out.println(Arrays.toString(arr));//[1, 9, 4]
    }
}

2、sort:排序(自然排序和定制排序)?

public class ArraysMethod01 {
    public static void main(String[] args) {
        //sort 方法
        Integer[] arr = {-1, 9, 4, 0, 25};
        //1.可以直接使用冒泡排序,也可以使用 Arrays.sort() 方法
        //2.因为数组是引用类型,所以通过sort排序后,会影响实参arr

        //Arrays.sort(arr);//默认排序方法 从小到大
        
        //3.sort是重载的,因此也可以通过传入一个接口 Comparator 实现定制排序
        Arrays.sort(arr, new Comparator() {//匿名内部类
            @Override
            public int compare(Object o1, Object o2) {
                Integer i1 = (Integer) o1;
                Integer i2 = (Integer) o2;
                return i2 - i1;
            }
        });
        System.out.println(Arrays.toString(arr));//[25, 9, 4, 0, -1]
    }
}
public class ArraysSortCustom {
    public static void main(String[] args) {
        int[] arr = {9, 1, 0, -7, 14};
        //bubble01(arr);

        bubble02(arr, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                int i1 = (Integer) o1;
                int i2 = (Integer) o2;
                return i1 - i2;
            }
        });
        System.out.println(Arrays.toString(arr));
    }

    //使用冒泡排序
    public static void bubble01(int[] arr) {
        int temp = 0;
        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]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    //结合冒泡 + 定制
    public static void bubble02 (int[] arr, Comparator c) {
        int temp = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                //数组的排序由 c.compare(arr[j], arr[j + 1] 返回的值决定
                if (c.compare(arr[j], arr[j + 1]) > 0) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
}

3、binarySearch:通过二分搜索法进行查找,要求必须排好序的数组

public class ArraysMethod02 {
    public static void main(String[] args) {
        Integer[] arr = {1, 2, 50, 70};
        //binarySearch:通过二分搜索法进行查找,要求必须排好序的数组
        //1.使用 binarySearch 二叉查找
        //2.要求该数组是有序的, 如果是无序的 不能使用binarySearch
        //3.如果数组中不存在该元素,就返回 return -(low + 1); //key not found
        //  low表示应该存在的位置
        int index = Arrays.binarySearch(arr, 50);
        System.out.println(index);//2
    }
}

4、copyOf:数组元素的复制

package com.javase.arrays_;

import java.util.Arrays;

public class ArraysMethod02 {
    public static void main(String[] args) {
        Integer[] arr = {1, 2, 50, 70};

        //copyOf:数组元素的复制
        //1.从 arr 拷贝 arr.length 到newArr数组中
        //2.如果拷贝的长度 > arr.length 就在新数组的后面 增加 null
        //3.如果拷贝的长度 < 0 就抛出异常 NegativeArraySizeException
        Integer[] newArr = Arrays.copyOf(arr, arr.length);
        System.out.println(Arrays.toString(newArr));
    }
}

5、fill:数组元素的填充

public class ArraysMethod02 {
    public static void main(String[] args) {

        //fill:数组元素的填充
        //1.使用 22 填充 num 数组,也可以理解为替换原来的元素
        Integer[] num = {1, 2, 3};
        Arrays.fill(num, 22);
        System.out.println(Arrays.toString(num));//[22, 22, 22]
    }
}

6、equals:比较两个数组元素的内容是否完全一致

package com.javase.arrays_;

import java.util.Arrays;

public class ArraysMethod02 {
    public static void main(String[] args) {
        Integer[] arr = {1, 2, 50, 70};

        //equals:比较两个数组元素的内容是否完全一致
        //1.如果arr 和arr2 的元素一样 就返回true
        //2.如果不是完全一样 就返回false
        Integer[] arr2 = {1, 2, 50, 70};
        boolean equals = Arrays.equals(arr, arr2);
        System.out.println(equals);//true
    }
}

7、asList:将一组值,转换成list

public class ArraysMethod02 {
    public static void main(String[] args) {

        //asList:将一组值,转换成list
        //1.aList 方法会将 (1, 2, 3, 4) 转成一个List 集合
        //返回的 编译类型 List(接口)
        //返回的 运行类型 java.util.Arrays$ArrayList 是 Arrays 类的静态内部类

        List aList = Arrays.asList(1, 2, 3, 4);
        System.out.println(aList);
        System.out.println("aList的运行类型 " + aList.getClass());
    }
}

三、入门练习

自定义Book类,里面包含name和price,按price排序

使用前面学习过的传递实现 Comparator 接口匿名内部类

要求按照price 从大到小, 从小到大, 按书名长度从大到小

public class ArrayExercise {
    public static void main(String[] args) {
        Book[] books = new Book[5];
        books[0] = new Book("西游", 50);
        books[1] = new Book("三国演义", 9);
        books[2] = new Book("Java从入门到放弃", 100);
        books[3] = new Book("红楼梦", 66);
        books[4] = new Book("水浒传108", 24);
        //从大到小
        Arrays.sort(books, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Book b1 = (Book) o1;
                Book b2 = (Book) o2;
                double d1 = b1.getPrice() - b2.getPrice();
                if (d1 > 0 ){
                    return -1;
                }else if (d1 < 0) {
                    return 1;
                }else {
                    return 0;
                }
            }
        });
        System.out.println("====价格从大到小====");
        for (int i = 0; i < books.length; i++) {
            System.out.println(books[i]);
        }

        //从小到大
        Arrays.sort(books, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Book b1 = (Book) o1;
                Book b2 = (Book) o2;
                double d1 = b1.getPrice() - b2.getPrice();
                if (d1 > 0 ){
                    return 1;
                }else if (d1 < 0) {
                    return -1;
                }else {
                    return 0;
                }
            }
        });
        System.out.println("\n====价格从小到大====");
        for (int i = 0; i < books.length; i++) {
            System.out.println(books[i]);
        }

        //按书名长度
        Arrays.sort(books, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Book b1 = (Book) o1;
                Book b2 = (Book) o2;
                return b2.getName().length() - b1.getName().length();
            }
        });
        System.out.println("\n====书名长度从大到小====");
        for (int i = 0; i < books.length; i++) {
            System.out.println(books[i]);
        }
    }
}

class Book {
    private String name;
    private double price;

    public Book(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "书名:" + name + " 价格:" + price;
    }
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:25:11  更:2022-10-31 12:30:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 4:47:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码