2014-10-22 91 views
0

此方法必須從2個索引點的傳遞數組中刪除重複的元素。但是,我瞭解到我們不允許使用Arraylist或LinkedList,只能使用Arrays。我該如何做這項工作?使用數組而不是列表Java

public Animal[] removeDuplicateAnimals(Animal[] animals, int fromIndex, int toIndex) { 
 
     int constFromIndex = fromIndex; 
 
     ArrayList<Animal> uniqueAnimals = new ArrayList<Animal>(); 
 
     Animal[] uniqueAnimalsArray = new Animal[0]; 
 
     uniqueAnimals.addAll(Arrays.asList(Arrays.copyOfRange(animals, 0, fromIndex))); 
 
     boolean existingFlag; 
 
     while (fromIndex < toIndex) { 
 
      existingFlag = false; 
 
      if(uniqueAnimals.size() == 0) 
 
       uniqueAnimals.add(animals[fromIndex]); 
 
      else { 
 
       int j = (constFromIndex - 1) > 0 ? (constFromIndex - 1): 0; 
 
       for (; j < uniqueAnimals.size(); j++) 
 
        if(uniqueAnimals.get(j).equals(animals[fromIndex])) { 
 
         existingFlag = true; 
 
         break; 
 
        } 
 
       if(!existingFlag) 
 
        uniqueAnimals.add(animals[fromIndex]); 
 
      } 
 
      fromIndex++; 
 
     } 
 
     uniqueAnimals.addAll(Arrays.asList(Arrays.copyOfRange(animals, toIndex, animals.length))); 
 
     return uniqueAnimals.toArray(uniqueAnimalsArray); 
 
    }

+0

使用「HashSet的構造函數」與「收藏」參數有關其將數組列表爲「Arrays.asList()」 .. – 2014-10-22 03:47:49

+1

基本計劃:創建一個數組,其大小爲'animals.length'。不用'ArrayList.add'來添加一個元素,而是使用'resultArray [resultIndex ++] ='元素來添加。當你完成後,你想要返回的數組可能比'animals'短,所以你可以使用'Arrays.copyOfRange'來返回第一個多個元素。我想你可以弄清楚細節。 – ajb 2014-10-22 03:57:36

回答

0

這有一些未處理的邊緣情況(OOBExceptions等),但如果我理解你問這樣的事情應該工作:

public Animal[] removeDuplicateAnimals(Animal[] animals, int fromIndex, int toIndex) { 
    int modifiedAnimalsSize = animals.length; 

    for (int i = fromIndex; i < toIndex; i++) { 
     for (int j = i+1; j < toIndex; j++) { 
      int k = modifiedAnimalsSize -1; 
      if (animals[i].equals(animals[j])) { 
       animals[j] = animals[k]; 
       animals[k] = null; 
       modifiedAnimalsSize--; 
       j--; 
      } 
     } 
    } 

    // return a new array which is resized 
    return Arrays.copyOf(animals, modifiedAnimalsSize); 
} 
0

對於每個動物在索引i在數組中,搜索同一動物從i + 1到toIndex的數組索引;如果存在重複項,則在原始數組中的該索引i處寫入null。這不會調整數組的大小。它只會用null替換重複項。

public Animal[] removeDuplicateAnimals(Animal[] animals, int fromIndex, int toIndex) { 
     for (int i = fromIndex; i++; i < toIndex) { 
      for (int j = i+1; j++; j <= toIndex) { 
       if (animals[i].equals(animals[j])) { 
        animals[i] == null; 
        break; 
       } 
      } 
     } 
     return animals; 
    }