欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中Arrays类常用方法整理

程序员文章站 2024-03-06 23:37:14
...

Arrays是什么

Arrays类位于 java.util 包中,主要包含了操纵数组的各种函数

Arrays中的常用函数

1.Arrays.sort(int[] a,int fromIndex,int toIndex)

这里的数组a可以是任何类型,这里拿int型举例。

(1)void Arrays.sort(int[] a)

这是最简单的用法
作用:将数组a升序排序。
示范代码:

int[] a={1,5,9,8,6,3,7,4,2,10};    
Arrays.sort(a);
for(int i:a){
  System.out.print(i+" ");
}

输出:

1 2 3 4 5 6 7 8 9 10

(2) void Arrays.sort(int[] a,int fromIndex,int toIndex)

作用:将fromIndex与toIndex之间的元素进行排序。
示范代码:

int[] b={1,5,9,8,6,3,7,4,2,10};
Arrays.sort(b,5,9);
for(int i:b){
  System.out.print(i+" ");
}

输出:

1 5 9 8 6 2 3 4 7 10

排序数组a第fromIndex个到第toIndex个元素之间的元素(包含第toIndex个,不包含第fromIndex个)。上面的3、7、4、2,变为了2、3、4、7。

(3)void Arrays.sort(T[] a,Comparator<? super T> c)

暂时没有研究Comparator之类的,日后补充。

2.Arrays.binarySearch(int[] a,int key,int fromIndex,int toIndex)

(1)int Arrays.binarySearch(int[] a,int key)

用二分查找法查找一个已排序的数组(未排序的数组有时候找的到有时候找不到,学过数据结构二分查找的应该明白)的元素key。数组a和元素key可以是double等其他类型。binarySearch的返回值有以下四种情况:

  • 搜索值不是数组元素,且在数组范围内,从1开始计数,得“ - 插入点索引值”
    示范代码:

    int[] a={1,6,8,10,12};
    int position2=Arrays.binarySearch(a, 11);
    System.out.println("position2:"+position2);  
    

    输出:

    position2:-5
    
  • 搜索值是数组元素,从0开始计数,得搜索值的索引值
    示范代码:

    int[] a={1,6,8,10,12};
    int position1=Arrays.binarySearch(a, 6);
    System.out.println("position1:"+position1);  
    

    输出:

    position1:1
    
  • 搜索值不是数组元素,且大于数组内元素,索引值为 – (length + 1)
    示范代码:

    int[] a={1,6,8,10,12};
    int position3=Arrays.binarySearch(a, 13);
    System.out.println("position3:"+position3);  
    

    输出:

    position3:-6
    
  • 搜索值不是数组元素,且小于数组内元素,索引值为 – 1
    示范代码:

    int[] a={1,6,8,10,12};
    int position4=Arrays.binarySearch(a, 0);
    System.out.println("position4:"+position4);  
    

    输出:

    position4:-1
    
  • 注意:因为二分查找的特性,若数组中有多个同样的元素,查找到的元素并不是多个同样的元素中的第一个。
    示范代码:

    int[] b={1,1,1,2,3};
    int position=Arrays.binarySearch(b, 1);
    System.out.println("position:"+position);
    position:2
    

    position值为2的原因是二分查找首先从中间开始查找。若想详细了解可以看这篇博文:二分查找(折半查找)

    (2)int Arrays.binarySearch(int[] a,int key,int fromIndex,int toIndex)

    与之前的void Arrays.sort(int[] a,int fromIndex,int toIndex)类似,只是加入了起始点和结束点,其他都与int Arrays.binarySearch(int[] a,int key)相同,这里不再赘述。

    (3)int Arrays.binarySearch(T[] a,Comparator<? super T> c)

    与之前相同的原因,有时间补上。

    写这一段的时候学习了这一篇博文Java之数组查询Arrays类的binarySearch()方法详解,在这里表示感谢。

3.List Arrays.asList(String[] args)

作用是将数组转换为List。
限制:数组类型不能是基本数据类型(byte,short,int,long,float,double,boolean,char)
示范代码:

String a[]={"a","b","c"};
List list=new ArrayList(Arrays.asList(a));      
System.out.println("a:"+a);        
System.out.println("list:"+list);

输出:

a:[Ljava.lang.String;@6d06d69c
list:[a, b, c]

注意:

  • 这样定义时,可以对列表进行增删改操作,并且列表不会与原来的数组同步更新(就是列表更新的时候数组不会更新)
    List list=new ArrayList(Arrays.asList(a));
    
    示范代码:
    String[] a={"a","b","c"};
    List list=new ArrayList(Arrays.asList(a));
    System.out.println("list:"+list);
    System.out.println("a:"+a);
    list.add("ss");
    list.remove("a");
    System.out.println("list:"+list);
    System.out.print("a:");
    for(String str:a){         
        System.out.print(str+" ");
    }
    list.set(0, "d");
    System.out.println("");
     System.out.println("list:"+list);
     System.out.print("a:");
     for(String str:a){           
        System.out.print(str+" ");
    }
    
    输出:
    a:[Ljava.lang.String;@6d06d69c
    list:[a, b, c]
    list:[b, c, ss]
    a:a b c
    list:[d, c, ss]
    a:a b c
    
  • 若是这样定义,则不能使用List.add(),remove()等方法。当数组更改时,List会随之更改。
    List list=Arrays.asList(a);
    
    示范代码:
    String[] a={"a","b","c"};        
    List list=Arrays.asList(a);        
    System.out.println("list:"+list);
    System.out.print("a:");                
    for(String str:a){           
      System.out.print(str+" ");
    }        
    a[0]="d";
    System.out.println("");
    System.out.println("list:"+list);
    System.out.print("a:");
    for(String str:a){           
      System.out.print(str+" ");
    }
    
    输出:
    list:[a, b, c]
    a:a b c
    list:[d, b, c]
    a:d b c
    
    详细了解可以戳
    浅谈Arrays.asList()方法的使用
    千万不要这样使用Arrays.asList !

4.Arrays.fill(object a[],int fromIndex,int toIndex,int val)

(1)void Arrays.fill(object a[],int val)

将数组a填满int val。
示范代码:

int[] a=new int[10];
Arrays.fill(a,50);
for(int i:a){
    System.out.print(i+" ");
}

输出:

50 50 50 50 50 50 50 50 50 50

(2)void Arrays.fill(object a[],int fromIndex,int toIndex,int val)

用val填充数组a第fromIndex个到第toIndex个元素之间的元素(包含第toIndex个,不包含第fromIndex个)。
示范代码:

int[] a=new int[10];
Arrays.fill(a,50);
Arrays.fill(a, 2,5,10);
for(int i:a){
    System.out.print(i+" ");
}

输出:

50 50 10 10 10 50 50 50 50 50

5.boolean Arrays.equals(object[] a,object[] b)

比较数组a和数组b的元素是否相等。
示范代码:

int[] a={1,2,3,4};
int[] b=a;
int[] c={1,2,3,4};
System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println(Arrays.equals(a, b));       
System.out.println("--------------");
System.out.println(a==c);
System.out.println(a.equals(c));
System.out.println(Arrays.equals(a, c));

输出:

true
true
true
--------------
false
false
true

关于==和equals的问题,笔者已经学习过很多遍了,每次想起来还是不知道(笑)
这篇博文我觉得解释得还算不错Java中==与equals的区别及理解

6.String Arrays.toString(object[] a)

将数组a转化为字符串。
示范代码:

int[] a={1,2,3,4};
System.out.println(Arrays.toString(a));

输出:

[1, 2, 3, 4]

7.String Arrays.deepToString(Object[][] a)

将多维数组转化为字符串。
示范代码:

int[][][] a={{{5}},{{3}},{{1}}};
System.out.println(Arrays.deepToString(a));

输出:

[[[5]], [[3]], [[1]]]

8.Arrays.copyOf(T[] a,int newlength)

从开头复制数组a,长度为newlength.
示范代码:

int[] a={1,2,3};
System.out.println(Arrays.toString(Arrays.copyOf(a, 2)));

输出:

[1, 2]

9.Arrays.copyOf(T[] a,int from,int to)

复制数组a从第from个到第to个元素(第from个不取,第to个取,与之前的相同)
示范代码:

int[] a={1,2,3,4,5};
System.out.println(Arrays.toString(Arrays.copyOfRange(a, 1,4)));

输出:

[2, 3, 4]

总结

这次将网上常见的Arrays类函数整理了一遍,如有不对的敬请批评指正。
写于2020-01-17 20:09

相关标签: java