java 實現字符數組去重

一、背景

根據不一樣的業務邏輯,常常會遇到數組中存在多個重複元素的場合,總結了下數組的排序,留個記錄。html

 

二、實現方法

 

總結了四種方法,接下來進行展現java

 

一、方法一

  1.  //數組去重方法一  
  2. String[] array = {"a","b","c","c","d","e","e","e","a"};  
  3. List<String> result = new ArrayList<>();  
  4. boolean flag;  
  5. for(int i=0;i<array.length;i++){  
  6.     flag = false;  
  7.     for(int j=0;j<result.size();j++){  
  8.         if(array[i].equals(result.get(j))){  
  9.             flag = true;  
  10.             break;  
  11.         }  
  12.     }  
  13.     if(!flag){  
  14.         result.add(array[i]);  
  15.     }  
  16. }  
  17. String[] arrayResult = (String[]) result.toArray(new String[result.size()]);  
  18. System.out.println(Arrays.toString(arrayResult));  

先遍歷原數組,而後遍歷結束集,經過每一個數組的元素和結果集中的元素進行比對,若相同則break。若不相同,則存入結果集。api

兩層循環進行遍歷得出最終結果。數組

 

二、方法二

  1. //數組去重方法二  
  2. String[] array = {"a","b","c","c","d","e","e","e","a"};  
  3. List<String> list = new ArrayList<>();  
  4. list.add(array[0]);  
  5. for(int i=1;i<array.length;i++){  
  6.     if(list.toString().indexOf(array[i]) == -1){  
  7.             list.add(array[i]);  
  8.     }  
  9. }  
  10. String[] arrayResult = (String[]) list.toArray(new String[list.size()]);  
  11. System.out.println(Arrays.toString(arrayResult));  

經過使用indexOf方法進行判斷結果集中是否存在了數組元素。oracle

 

三、方法三

  1. //數組去重方法三  
  2. String[] array = {"a","b","c","c","d","e","e","e","a"};  
  3. List<String> list = new ArrayList<>();  
  4. for(int i=0;i<array.length;i++){  
  5.     for(int j=i+1;j<array.length;j++){  
  6.         if(array[i] == array[j]){  
  7.             j = ++i;  
  8.         }  
  9.     }  
  10.     list.add(array[i]);  
  11. }  
  12. String[] arrayResult = (String[]) list.toArray(new String[list.size()]);  
  13. System.out.println(Arrays.toString(arrayResult));  

嵌套循環,進行比較獲取知足條件結果集。ide

 

四、方法四

  1.         //數組去重方法四  
  2.         String[] array = {"a","b","c","c","d","e","e","e","a"};  
  3.         Arrays.sort(array);  
  4.         List<String> list = new ArrayList<>();  
  5.         list.add(array[0]);  
  6.         for(int i=1;i<array.length;i++){  
  7.             if(!array[i].equals(list.get(list.size()-1))){  
  8.                 list.add(array[i]);  
  9.             }  
  10.         }  
  11. <pre name="code" class="java"><span style="white-space:pre">        </span>String[] arrayResult = (String[]) list.toArray(new String[list.size()]);  

System.out.println(Arrays.toString(arrayResult));this

先使用java提供的數組排序方法進行排序,而後進行一層for循環,進行相鄰數據的比較便可得到最終結果集。spa

五、方法五

  1. //數組去重方法五  
  2.         String[] array = {"a","b","c","c","d","e","e","e","a"};  
  3.         Set<String> set = new HashSet<>();  
  4.         for(int i=0;i<array.length;i++){  
  5.             set.add(array[i]);  
  6.         }  
  7.         String[] arrayResult = (String[]) set.toArray(new String[set.size()]);  
  8.         System.out.println(Arrays.toString(arrayResult));  

    加入set方法進行添加,雖然是無序排列,可是也更方便的解決了去重的問題。
 code

三、知識說明

一、ArrayList集合轉數組

  1. String[] arrayResult = (String[]) list.toArray(new String[list.size()]);  


對應的java方法APIhtm

 

toArray

public Object[] toArray()

Returns an array containing all of the elements in this list in proper sequence (from first to last element).

The returned array will be "safe" in that no references to it are maintained by this list. (In other words, this method must allocate a new array). The caller is thus free to modify the returned array.

This method acts as bridge between array-based and collection-based APIs.

 

Specified by:

toArray in interface Collection<E>

Specified by:

toArray in interface List<E>

Overrides:

toArray in class AbstractCollection<E>

Returns:

an array containing all of the elements in this list in proper sequence

See Also:

Arrays.asList(Object[])

 

 

toArray

public <T> T[] toArray(T[] a)

Returns an array containing all of the elements in this list in proper sequence (from first to last element); the runtime type of the returned array is that of the specified array. If the list fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this list.

If the list fits in the specified array with room to spare (i.e., the array has more elements than the list), the element in the array immediately following the end of the collection is set to null. (This is useful in determining the length of the list only if the caller knows that the list does not contain any null elements.)

 

Specified by:

toArray in interface Collection<E>

Specified by:

toArray in interface List<E>

Overrides:

toArray in class AbstractCollection<E>

Parameters:

a - the array into which the elements of the list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.

Returns:

an array containing the elements of the list

Throws:

ArrayStoreException - if the runtime type of the specified array is not a supertype of the runtime type of every element in this list

NullPointerException - if the specified array is null

 

二、數組直接打印到控制檯

 

直接調用Arrays的toString方法進行轉換再進行打印操做。

實例:

  1. System.out.println(Arrays.toString(arrayResult));  

四、總結

 

僅僅是根據本身想法進行總結,確定還有更多更優的方法可以去實現,但願大神指出教導。

相關文章
相關標籤/搜索