开篇话:Apache Commons类库有很多,几乎大多数的开源框架都依赖于它,那么,它有什么好处呢?Commons中的工具会节省你大部分时间,它包含一些常用的静态方法和Java的扩展。是开发中提高效率的一套框架,同时也使得代码变得简单易懂。开Commons效率篇帖子的宗旨是大家看看小例子,自己揣摩揣摩,看看实际的项目中能用到的地方有哪些,然后运用到自己的代码中,使得代码简洁,也提高效率。
数组是开发中时常会用到的,但是数组在操作和查找过程中也有自己的局限性,如:不能动态改变数组大小,查找元素需要循环遍历。对此,在开发中如何去便捷的使用数组呢?可以看看如下的例子。
问题:现有一个数组,需要判断该数组中是否存在某个元素,并取得其下标。
遇到这个问题,估计有多数的人会想去遍历这个数组,逐个判断,直到找到这个对象。例如:
- public void contains() {
- String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
- boolean containsBlue = false;
- for (String color : strings) {
- if (StringUtils.equals(color, "Blue")) {
- containsBlue = true;
- break;
- }
- }
- System.out.println("Array contains 'Blue'? " + containsBlue);
- }
复制代码
输出结果:Array contains 'Blue'? true
但是,每次都写for循环会使代码的圈复杂度增加有咩有。。。
其实,Apache Commons Lang库中的ArrayUtils工具类给已经给咱们咱提供了现成的实现。可以只需要一行代码。如下:
- public void contains() {
- String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
- boolean containsBlue = ArrayUtils.contains(strings, "Blue");
- System.out.println("Array contains 'Blue'? " + containsBlue);
- }
复制代码
如果数组中存放的不是基本类型的元素,该方法会调用元素的equals()方法搜索匹配的对象。
同样,判断一个元素在数组中的第几个元素,可以这么实现:
- public void indexOf() {
- String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
- int blueIndex = ArrayUtils.indexOf(strings, "Blue");
- System.out.println("Array indexOf 'Blue'? " + blueIndex);
- }
复制代码
输出结果:Array indexOf 'Blue'? 2
ArrayUtils也提供了lastIndexOf方法,方便从后向前查找元素。
问题:向一个数组中某一个位置添加或者删除元素。
大家都知道,数组是一经初始化,是不能修改其大小的,这就导致无法直接向数组添加或者删除元素。如果需要实现这个功能,则需要在创建一个数组,其大小为操作完后的数组大小,然后自己for循环把新的数据放入到数组。当然,也可以使用JAVA自带的Arrays类把数组转换为List,然后进行修改。
ArrayUtils也提供了一行代码搞定问题的方法,如下:
- public void add() {
- String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
- strings = ArrayUtils.add(strings, 3, "Yellow");
- System.out.println("Array:" + ArrayUtils.toString(strings));
- }
复制代码
输出结果:Array:{Red,Orange,Blue,Yellow,Brown,Red}
可以看到,一行代码就完成了添加元素。十分方便。
ArrayUtils中还提供了反转数组,一次添加多个元素等方法例如:
- public void reverse() {
- String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
- ArrayUtils.reverse(strings);
- System.out.println("Array:" + ArrayUtils.toString(strings));
- strings = ArrayUtils.addAll(strings, "Yellow", "Green");
- System.out.println("Array:" + ArrayUtils.toString(strings));
- }
复制代码
输出结果:
Array:{Red,Brown,Blue,Orange,Red}
Array:{Red,Brown,Blue,Orange,Red,Yellow,Green}
其实,实际情况是这样的,大家项目中对集合的操作都用的List,List的确比数组使用起来方便许多。可有的场景下,你拿到的只是一个数组,你只需要完成添加者删除元素等简单方法,就可以使用Commons中提供的方法,不用再做转换。与此同时,Commons 库对Java中的List/Map/Set也有相应的工具,后面的帖子也会涉及到。