數組是開發中時常會用到的,但是數組在操作和查找過程中也有自己的侷限性,如:不能動態改變數組大小,查找元素需要循環遍歷。對此,在開發中如何去便捷的使用數組呢?可以看看如下的例子。
問題:現有一個數組,需要判斷該數組中是否存在某個元素,並取得其下標。
遇到這個問題,估計有多數的人會想去遍歷這個數組,逐個判斷,直到找到這個對象。例如:
- 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也有相應的工具,後面的帖子也會涉及到。