java中的精神小伙---->Arrays类详解

Arrays类

概述

​ java.util.Arrays类是一个与数组相关的工具类, 里面提供了大量实现数组常见操作的静态方法。可以实现数组的排序和查找,数组的比较,对数组添加元素,复制数组,将数组转化为字符串等功能。这些方法都有对基本类型的重载方法。

Arrays类的常用方法

asList(T…a)

​ 将数组转化为的集合, 需注意返回的集合类型必须与数组类型一致, 但因为集合不能添加基本类型的数据, 所以若要使用基本类型的数据, 必须使用基本类型包装类。

​ 代码示例

import java.util.Arrays;
import java.util.Collection;

public class asListDemo {
    
    
    public static void main(String[] args) {
    
    
        String [] a = {
    
    "你","好","吗"};//定义一个字符串数组
        Collection list1 = Arrays.asList(a);//将数组转换为集合
        System.out.println(list1); //[你, 好, 吗]
    }
}

fill 填充数组

​ Arrays类中提供了 fill() 方法, 可以对数组进行填充。fill 可以填充的类型既包括基本数据类型,也包括引用数据类型。

import java.util.Arrays;

//fill()填充数据
public class fillDemo {
    
    
    public static void main(String[] args) {
    
    
        //填充基本类型
        int [] arr = new int[5];
        Arrays.fill(arr,5);
        System.out.println(Arrays.toString(arr));

        boolean [] arr1 = new boolean[5];
        Arrays.fill(arr1,true);
        System.out.println(Arrays.toString(arr1));

        //填充引用类型
        String s = "hello";
        String [] arr2 = new String[5];
        Arrays.fill(arr2,s);
        System.out.println(Arrays.toString(arr2));
        
    }

}

equals 比较

​ 1.比较;两个非同一数组是否相等, 而数组本身的equals判断另一个数组是否是它本身;

​ 2.声明: public static boolean equals (type[] a, type[] a2);

​ 3.参数的类型可以是基本数据类型和引用数据类型的任意一种;

​ 4.返回: 如果两个相等,则返回true, 否则返回false。

import java.util.Arrays;

public class equalsDemo {
    
    
    public static void main(String[] args) {
    
    
        int [] a = {
    
    1,2,3};
        int [] b = {
    
    1,2,3};
        System.out.println(Arrays.equals(a,b));//true

        String [] c= {
    
    "点","赞"};
        String [] d= {
    
    "点","赞"};
        System.out.println(Arrays.equals(c,d));//true
    }
}

排序

sort排序
1. 如果是数值, sort默认按照升序从小到大;
2. 如果是字符串, sort默认按照字母升序;
3. sort(double[] a,  int fromIndex, int toIndex)  对指定区间进行排序,包含开始,不含结束。

代码示例

扫描二维码关注公众号,回复: 12161531 查看本文章
import java.util.Arrays;

//sort排序---底层使用快速排序法(快排)
public class sortDemo {
    
    
    public static void main(String[] args) {
    
    
        //对数字数组默认进行升序排列--->从小到大
        int [] a = {
    
    23,31,0,23,1,1,1,2};
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));//[0, 1, 1, 1, 2, 23, 23, 31]
        //对字母默认按照字母顺序升序--->实质是按照ASCII码表进行的
        char [] b = {
    
    'c','s','A','a','S'};
        Arrays.sort(b);
        System.out.println(Arrays.toString(b));//[A, S, a, c, s]
        //sort(数组a,索引1,索引2)--->对指定区间进行排序,包含开始,不含结束
        int [] c = {
    
    23,31,0,23,1,1,1,2};
        Arrays.sort(c,0,4);
        System.out.println(Arrays.toString(c));//[0, 23, 23, 31, 1, 1, 1, 2]
    }
}
自定义排序

​ 自定义类实现Comparable接口,重写CompareTo方法。

​ compareTo() 方法: Arrays类中的sort方法在排序比较时每次调用compareTo方法会传来两个对象相互比较,结果有三种: “>0” “==0” “<0” , 即自定义排序规则。

import java.util.Arrays;

public class MySortDemo implements Comparable<MySortDemo>{
    
    
    private String name;
    private int age;
    //构造方法
    public  MySortDemo(){
    
    

    }
    public MySortDemo(String name,int age){
    
    
        this.name = name;
        this.age = age;
    }
    //重写排序方法---compartor---按照员工年龄排序
    @Override
    public int compareTo(MySortDemo other) {
    
    
        return Integer.compare(age,other.age);
    }

    public String getName(){
    
    
        return name;
    }
    public int getAge(){
    
    
        return age;
    }
}
class Main{
    
    
    public static void main(String[] args) {
    
    
        MySortDemo[] people = new MySortDemo[4];
        people[0] = new MySortDemo("JIM",20);
        people[1] = new MySortDemo("TOM",29);
        people[2] = new MySortDemo("Lue",19);
        people[3] = new MySortDemo("LuFu",18);
        Arrays.sort(people);

        for (MySortDemo e: people) {
    
    
            System.out.println("name:"+e.getName()+"\t age:"+e.getAge());
        }
        /*输出
          name:LuFu	 age:18
          name:Lue	 age:19
          name:JIM	 age:20
          name:TOM	 age:29
        */

    }
}

二分搜索/折半查找

  1. binSearch——使用二分搜索算法搜索指定数组。

  2. 前提 :数组必须有序。

  3. 如果没有找到,会返回一个负数,如果有则返回key的索引值。

  4. 也可以在数组中的指定区间进行查找。包含开始,不包含结束。

  5. 声明:

    public static int binarySearch(type[] a,type k)
    public static int binarySearch(long[] a,int fromIndex,int toIndex,long key)
    

    参数:

    a - 要搜索的数组
    key - 要搜索的值
    fromIndex - 要排序的第一个元素的索引(包括)
    toIndex - 要排序的最后一个元素的索引(不包括)
    

代码示例

import java.util.Arrays;

public class binarySearchDemo {
    
    
    public static void main(String[] args) {
    
    
        int [] a = {
    
    1,2,3,4,5,6,7,8};
        System.out.println(Arrays.binarySearch(a,7));//6
        System.out.println(Arrays.binarySearch(a,0));//-1
        System.out.println(Arrays.binarySearch(a,2,4,3));//2
    }
}

toString()

1. 声明: public static String toString(type[] a)
2. 描述: 返回指定数组内容的字符串表示形式
3. 基本数组, 字符串表示形式由数组的元素列表组成, 扩在[], 相邻元素用" , "(逗号加空格)分隔

代码示例

import java.util.Arrays;

public class toStringDemo {
    
    
    public static void main(String[] args) {
    
    
        int [] a ={
    
    1,2,3,6,2,2,5,21,6};
        System.out.println(Arrays.toString(a));
    }
}

​ toString()的代码示例好尴尬, 这玩意儿就是大家一直用的, 各位如果有兴趣就去翻翻源码, 不想翻的会用就行,事实上toString方法在后面的学习中更多的会要求自己重写, 以满足开发需求。

猜你喜欢

转载自blog.csdn.net/Lotus_dong/article/details/109821850