java -- 数组常用方法
前言
Arrays类来自于 java.util.Arrays;
java JDK自带的 java.util.Arrays对象,提供的功能接口非少,在开发过程中很不方便,所以我们一般都会使用一个Array的工具类,例如: Apache common lang,它提供了大量的实用方法,可以大大减少开发中代码量;
但是,Apache common lang工具类实际上也是通过原生 java.util.Arrays类的封装来拓展了一些功能,所以对于java.util.Arrays的一些常用的方法,我们还是要有一些了解
常用方法
fille:填充数组
String[] strList = new String[3]; Arrays.fill(strList, "char");
//strList值填充为{"char","char","char"}
String[] strList = new String[]{"default","default"};
Arrays.fill(strList, "char");//即便strList 初始化时存在值,也会被覆盖,strList值为:{"char","char","char"}
asList:将数组转化为List || Set
特别注意,将整形数组转为集合,必须用原始类型。不能直接将int[]转化为集合、因为asList()方法的参数必须是对象。应该先把int[]转化为Integer[]。对于其他原始的类型的数组也是如此,必须先转换成相应的包装类类型数组。Java是面向对象的编程语言,也就说一切皆为对象.可是那些int double 等八种数据类型却不是对象,这就与Java的一切皆是对象的思想相矛盾了,所以为了解决这个问题,Java就出现了包装类,把那些基本数据类型进行包装,让它成为了一个类,等用到的时候直接调用就可以了..因为集合的类型必须为对象,所以添加元素类型必须为原始类。
String[] strList = new String[]{"default","default"}; //将数组转化成list //转化成ArrayList ArrayList<String> arrayList=new ArrayList<>(Arrays.asList(strList)); //转化陈成LinkedList LinkedList<String> LinkedList=new LinkedList<>(Arrays.asList(strList)); //转化成Set Set<String> set=new HashSet<>(Arrays.asList(strList));
Array.toString().contains("default"):判断数组中,指定的元素是否存在(适用于字符串数组)
contains是字符串上的方法,先用toString将数组转化成字符串,然后在通过字符串的contains方法,选取到指定的字符串
String[] strList = new String[]{"default","default2"}; //判断元素是否存在于数组 boolean bl= Arrays.toString(strList).contains("default");
Array.binarySearch:判断数组中指定的元素是否存在(适用于数值类型,并且要求数组内元素排序)return 元素存在的索引位置,如果不存在则为-1,如果元素存在,但是集合不是排序集合,那么返回-2
此方法是采用2分法进行查找的,所以必须要求元素安顺序排列
int[] ints = new int[]{1, 7, 5, 4, 8, 2, 6, 3, 9}; int idx = Arrays.binarySearch(ints, 0);
Apache common lang
p("=============== ArrayUtils 工具类使用 ,这个类对null的输入处理很好================"); String strs[] = { "str1", "str2", "str3" }; p(ArrayUtils.add(strs, 0, "测试字符串")); p("向数组中末尾添加元素"); p(ArrayUtils.add(strs, "str3")); p("向数组指定位置添加元素"); p(ArrayUtils.add(strs, 1, "str3")); p("向数组中添加所有元素"); p(ArrayUtils.addAll(strs, "str3", "str4")); p("拷贝数组"); p(ArrayUtils.clone(strs)); p("数组中是否包含指定的元素"); p(ArrayUtils.contains(strs, "str2")); p("获取数组的长度"); p(ArrayUtils.getLength(strs)); p("查找第一次出现的位置"); p(ArrayUtils.indexOf(strs, "str2")); p("判断数组是否是空的"); p(ArrayUtils.isEmpty(strs)); p("判断数组是否非空"); p(ArrayUtils.isNotEmpty(strs)); p("判断数组是否相等"); p(ArrayUtils.isEquals(strs, new String[] { "str2" })); p("判断数组长度是否相等"); p(ArrayUtils.isSameLength(strs, strs)); p("判断数组类型是否相同"); p(ArrayUtils.isSameType(strs, new String[] { "str" })); p("查找数组中最后出现元素的位置"); p(ArrayUtils.lastIndexOf(strs, "str2")); p("null转换成空数组"); p(ArrayUtils.nullToEmpty(strs)); p("从数组中移除指定索引的元素"); p(ArrayUtils.remove(strs, 1)); p("从数组中移除所有指定的元素"); p(ArrayUtils.removeAll(strs, 1, 2)); p("移除数组中指定的元素"); p(ArrayUtils.removeElement(strs, "str1")); p("移除数组中指定的所有元素"); p(ArrayUtils.removeElements(strs, "str1", "str2")); p("颠倒数组"); ArrayUtils.reverse(strs); p(strs); p("子数组"); p(ArrayUtils.subarray(strs, 0, 2)); p("构建数组"); p(ArrayUtils.toArray("str1", "str2")); p("将二维数组转换成Map"); String mapStr[][] = { { "key1", "value1" }, { "key2", "value2" } }; p(ArrayUtils.toMap(mapStr)); p("将基本类型数组转换成包装类型"); p(ArrayUtils.toObject(new int[] { 1, 2, 3, 4, 5 })); p("将包装类型数组转换成基本类型"); p(ArrayUtils.toPrimitive(new Integer[] { 1, 2, 3, 4, 5 })); p("将数组用字符串的形式输出"); p(ArrayUtils.toString(strs));