JAVA常用类(三):Arrays类(与Collection类对比)

目录

Arrays类:

成员方法:

源码分析:


Arrays类:

Arrays 类是 java 针对数组进行操作的工具类,提供了排序、排序等功能。 ------------------  java.util 包

相比集合专门存储对象,数组既可以存储基本数据类型,也可以存储引用数据类型。

成员方法:

public static <T> List<T> asList(T ... a):返回一个受指定数组支持的固定大小的列表(与Collections连接的桥梁),只读。一般通过重新实例化 new ArrayList(list) 将其转为可写的集合。

public static String toString(int[] a):得到数组的字符串形式  [数组的元素1,2,3,4]

public static void sort(int[] a):排序(默认升序)

public static int binarySearch(int[] a,int key) :二分查找(只支持升序的数组)

public static void sort(int[] a,Comparator<? super T> c): 通过重写public int compare(T o1, T o2)方法,实现自定义排序顺序。

public static String toString(int[] a):将数组转成字符串便于输出,支持所有基本数据类型的数组,还有Object[ ]。

注:更多方法详见API文档。


ArrayUtil为自定义的工具类:
================================================================
public class ArrayDemo04 {
	public static void main(String[] args) {
		int[] arr = {1,2,5,6,3,8,25};
		ArrayUtil.printArray(arr);   //[1,2,5,6,3,8,25]
		
		String str = Arrays.toString(arr);
		System.out.println(str);   //[1, 2, 5, 6, 3, 8, 25]
		
		Arrays.sort(arr);   //排序:默认是升序
		ArrayUtil.printArray(arr);   //[1,2,3,5,6,8,25]
		int index = Arrays.binarySearch(arr, 6);  
		System.out.println(index);      //4
		
		ArrayUtil.reverse(arr);  //将升序数组转为降序数组
		ArrayUtil.printArray(arr);    //[25,8,6,5,3,2,1]
		
		index = Arrays.binarySearch(arr, 6);  //二分查找:只支持升序的数组,对于降序数组不适用
		System.out.println(index);   //-8
	}
}
public class Demo7 {
	public static void main(String[] args) {
		Person[] p = new Person[] {new Person("张",18),new Person("里",25)};
		System.out.println(p[1]);
		Integer[] arr = {5,6,2,3,8,4};

		Arrays.sort(arr, new Comparator<Integer>(){  //泛型不能是int[]的
			@Override
			public int compare(Integer o1, Integer o2) {
				// TODO Auto-generated method stub
				return o2-o1;
			}
		});
		String str = Arrays.toString(arr);
		System.out.println(str);
	}
}
public class Demo1 {

	public static void main(String[] args) {
		Person01[] p = {new Person01("zk",18),new Person01("ls",20),new Person01("hs",19)};
		
		Arrays.sort(p, new Comparator<Person01>() {

			@Override
			public int compare(Person01 o1, Person01 o2) {
				
				return o1.getAge() - o2.getAge();
			}
			
		});
		for (Person01 person : p) {
			System.out.println(person);
		}
	}
}

class Person01{
	String name;
	int age;
	
	public Person01() {}
	
	public Person01(String name,int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
}

源码分析:

List<T> list = Arrays.asList(T ... a) : 返回一个只读的列表集合

由下面可以看出:该list集合底层使用E[ ]存储,并且被 final 修饰,表示长度,属性值不可更改。即只有可读属性。要想对其操作可以使用 new ArrayList(Collection<T> c) 方法返回一个ArrayList类型的对象。这是因为ArrayList使用Object[ ]类型的elementData,size记录元素个数,length表示数组长度,二者不相等。数组没有使用final修饰。

位于Arrays.class中
=================================================
public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
}
上面的ArrayList位于Arrays$ArraysList.class中,$表示内部类
========================================================
private final E[] a;
ArrayList(E[] array) {
    a = Objects.requireNonNull(array);
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值