正确应用Java数组
2020-12-13 13:47
标签:函数 array binary 包装 初始 序列 对象类型 数组初始化 的区别 一、数组的特点 数组与其他容器的区别有三方面:效率、类型和保存基本类型的能力。 1、效率。数组是一种效率最高的存储和随机访问对象引用序列的方式。数组是一段连续地址空间内的线性序列,所以访问非常快。但也要付出点代价,数组对象的大小一旦创建就不能改变。 2、类型。出现泛型之前,只有数组能够保持有类型的对象引用,其他容器只能保存Object的引用。 3、保存基本类型。数组直接保存基本类型的值,使用其他容器需要转换成包装类,效率大大下降。数组在连续的地址空间中保存基本类型的值,对象则保存其引用。 二、数组的初始化 2、一维数组创建 3、多维数组创建 4、数组与泛型 三、Arrays的使用 1、fill() 2、equals() 3、sort() 对象类型数组排序有两种方式。 4、binarySearch() 未找到返回一个负数。 5、asList 正确应用Java数组 标签:函数 array binary 包装 初始 序列 对象类型 数组初始化 的区别 原文地址:https://www.cnblogs.com/suen061/p/11537994.html
1、数组是第一级引用
无论使用哪种类型的数组,数组标识符其实只是一个对象的引用,该对象用来保存数组的值,只读成员length是该对象唯一可以访问的字段。数组对象可以使用new关键字显式创建,也可以使用数组初始化语法隐式创建。
方法需要返回多个值时,可以返回一个数组。这在C语言里面是不行的,C语言里面离开函数创建的数组就被销毁了。int[] a = new int[10]; //指定空间大小
int[] a = {3,4,5,6,7,19,20};//隐式创建数组,只能用来定义。不能作为参数传递。
int[] a = new int[]{7,9,30,2,19};//可作为参数传递。
Java的多维数组是粗糙数组。即不要求低维度的数组长度保持一致。int[][][] a = new int[10][][];
int[][] a = {{1,2,3,4,5},{8,9,10}};//各维度用{}括起来。
int[][] a = new int[][]{{8,9,4},{3,4,5,6,9}};
不能实例化具有参数化类型的数组。List
对所有的元素填充同一个值,对象填充对象的引用。int[] a = new int[10];
Arrays.fill(a, 10);//填充10
Integer[] a = new Integer[10];
Arrays.fill(a, new Integer(10));//填充10
比较两个数组是否相同,条件是数组的长度和每个元素都相同。
对数组排序,基本类型的只能按升序。int[] a = new int[]{3,4,5,2,1,7,9,8,10};
Arrays.sort(a);//升序排列
方式1:类可以比较
class T implements Comparable{
int s;
int e;
public T(int s, int e){
this.s = s;
this.e = e;
}
public int compareTo(T t){
return this.s - t.s; //大于0则交换位置
}
}
T[] a = new T[10];
Arrays.sort(a);
方式2:给类一个比较器
class T{
int s;
int e;
public T(int s, int e){
this.s = s;
this.e = e;
}
}
import java.util.Comparator;
T[] a = new T[10];
Arrays.sort(a, (x, y)-> x.s - y.s);//lambda表达式
二分查找,对有序数组进行查找,对象调用比较器或者该对象可比。Arrays.binarySearch(a, r, (x, y) -> x.s - y.s);//r为待查找的对象。
接收一个序列,或者数组。返回一个List;