创建数组的三种方法
int [] vec = { 37 , 47 , 23 } ; 静态初始化(只能用在声明数组变量时候同时初始化)
int [] vec = new int [] {1, 5, 3}; 动态初始化
int [] vec = new int [3]; //自动赋“0”值[ 0, 0, 0 ] 动态初始化
vec[0]=1; //修改数组的值
vec[1]=2;
vec[2]=3;
"零"值包括:0(整型)、0.0(浮点型)、 \u0000(char)、false(boolean)、null(引用类型)
数组的方法
集合(ArrayList)-------〉数组
String[] stringArray = { "a", "b", "c", "d", "e" };
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
System.out.println(arrayList); //[a, b, c, d, e]
String[] stringArr = new String[arrayList.size()];
arrayList.toArray(stringArr);
for (String s : stringArr) {System.out.print(s); } //abcde
数组-------〉集合(ArrayList)
List<T> list =Arrays .asList(数组或逗号分隔的元素列表);
Integer[] ary1= new Integer[]{1,2,3,}; //基本类型要用包装类型
List<Integer> list= Arrays.asList(ary1);
List<Integer> list= Arrays.asList(1,2,3);
String[] stringArray = { "a", "b", "c", "d", "e" };
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
System.out.println(arrayList); //[a, b, c, d, e]
数组--------〉集合(set)
String[] stringArray = { "a", "b", "c", "d", "e" };
Set<String> set = new HashSet<String>(Arrays.asList(stringArray));
System.out.println(set); //[d, e, b, c, a]
整数数组------〉字节数组
byte[] bytes = ByteBuffer.allocate(4).putInt(8).array();
for (byte t : bytes) {
System.out.format("0x%x ", t);
}
数组排序
Arrays.sort(数组 ) (适用于各种类型数组,升序排序)
Arrays.sort(数组 ,排序开始下标,排序结束下标)
数组填充
Arrays.equals(数组 , 填充的值) (适用于各种类型数组) //用指定值填充数组元素
Arrays.equals(数组 ,填充开始下标,填充结束下标, 填充的值)
查找数组元素
int a=Arrays.binarySearch(数组,数组的某元素); //查找指定数组里的元素,获取该元素的下标值(需要先排序)
int a=Arrays.binarySearch(数组,查询开始下标,查询结束下标,数组的某元素);
数组比较
Boolean boolean= Arrays.equals(数组 1 , 数组 2) (适用于各种类型数组)
注意:相同数量、相同顺序的元素;或者都为 null 则相等
检查一个数组是否包含某个值
String[] stringArray = { "a", "b", "c", "d", "e" };
Boolean b = Arrays.asList(stringArray).contains("a");
System.out.println(b); //true
数组复制
1、for循环
int [] ary1= new int []{1,2,3,};
int [] ary2= new int [ary1.length];
for(int i=0; i<ary1.length; i++){
ary2 [i] =ary [i];
}
2、System.arraycopy(源数组, 源数组复制的起始下标,目标数组,目标数组粘贴的起始下标,复制长度)
用 C++写的,所以速度非常快,比 for()循环实现数组拷贝效率要高很多
int [] ary1= new int []{1,2,3,};
int [] ary2= new int [3];
System.arraycopy(ary1, 0, ary2, 0, ary1.length)
System.out.print(Arrays.toString(ary2));
3、Arrays.copyOf(复制的数组 , 创建新数组的长度)JDK 版本必须是 1.6 及以上(适用于各种类型数组)
int [] ary1= new int []{1,2,3,};
int [] ary2= Arrays.copyOf(ary1, ary1.length); // ary2= [1 ,2,3]
int [] ary3= Arrays.copyOf(ary1, 5); // ary2= [1 ,2,3,0,0]
System.out.print(Arrays.toString(ary2));
4、Arrays.copyOfRange(复制的数组 , 复制的起始下标,复制的结束下标)JDK 版本必须是 1.6 及以上(适用于各种类型数组)
注意:起始下标包括在内,结束下标可 > 复制数组长度 ;返回一个新数组超出源数组的长度用相应类型的默认值填补
输出一个数组
各种数组的输出形式:
char[] ch = {'中' ,'国'}; System.out.println(ch); //北京,以字符串形式输出
int[] in = {1 ,2}; System.out.println(in); //..@.. 输出数组对象的内存地址
String[] str={"中" ,"国"} ; System.out.println(str); //..@.. 输出数组对象的内存地址
1、for循环输出
2、Arrays.toString() (适用于各种类型数组) //数组的字符串形式输出
char[] ch = {'中' ,'国'}; System.out.println(Arrays.toString(ch)); // [北 ,京]
int[] in = {1 ,2}; System.out.println(Arrays.toString(in)); // [1 ,2]
String[] str={"中" ,"国"} ; System.out.println(Arrays.toString(str)); // [北 ,京]
连接两个数组
int[] intArray = { 1, 2, 3, 4, 5 };
int[] intArray2 = { 6, 7, 8, 9, 10 };
int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);
数组 反转
int[] intArray = { 1, 2, 3, 4, 5 };
ArrayUtils.reverse(intArray);
System.out.println(Arrays.toString(intArray)); //[5, 4, 3, 2, 1]
移除数组中的元素
int[] intArray = { 1, 2, 3, 4, 5 };
int[] removed = ArrayUtils.removeElement(intArray, 3);//create a new array
System.out.println(Arrays.toString(removed));