2014-01-21 3 views
2

Мой метод удаления повторяющихся номеров работает, но не если число отображается более двух раз. , например. список с цифрами 1,2,2,3,4,5,6,7,7,7,8,9 при использовании метода дает список 1,2,3,4,5,6,7,7, 8,9Почему мой метод removeDuplicates удаляет только дублирующее целое число при первом его обнаружении?

import java.util.*; 
public class final SortAndRemove{ 
    private SortAndRemove(){ 
    } 
public static void selectionSort(List<Integer> a){ 
    if(a == null) 
     return; 
    if (a.size() == 0 || a.size() == 1) 
     return; 

    int smallest; 
    int smallestIndex; 
    for (int curIndex = 0; curIndex < a.size(); curIndex++) { 

     smallest = a.get(curIndex); 
     smallestIndex = curIndex; 

     for (int i = curIndex + 1; i < a.size(); i++) { 
      if (smallest > a.get(i)) { 

       smallest = a.get(i); 
       smallestIndex = i; 
      } 
     } 


     if (smallestIndex == curIndex); 

     else { 
      int temp = a.get(curIndex); 
      a.set(curIndex, a.get(smallestIndex)); 
      a.set(smallestIndex, temp); 
     } 

    } 
} 


public static void removeDuplicates(List<Integer> a){ 
    if(a == null) 
     return; 
    if (a.size() == 0 || a.size() == 1) 
     return; 
    for(int curIndex = 0; curIndex <a.size(); curIndex++){ 
     int num = a.get(curIndex); 
      for(int i = curIndex + 1; i < a.size(); i++){ 
       if(num == a.get(i)) 
        a.remove(i); 
      } 

    } 

} 

    } 
+3

Насколько я знаю, класс Utility - это всего лишь куча полезных часто используемых/необходимых функций, которые могут быть использованы в любом приложении. Например, сортировка, дедупликация, выбор времени, классы контейнеров и т. Д. –

+1

да, хорошо выглядит. Утилита класса в основном просто класс с кучей статических методов, которые вы используете часто и для многих разных вещей, которые могут или не могут быть связаны друг с другом. Как и статические члены System.String, можно рассматривать как класс полезности. Возможно, вы захотите объявить статический герметичный класс. –

+1

Это действительно мнение основано на том, что в Java нет формального определения «класса полезности», о котором я знаю. Я лично написал такие классы, как ваш 'SortAndRemove' и ссылаюсь на него как таковой. Единственное, что вы можете добавить, это частный конструктор, поэтому он не может быть создан. –

ответ

3

Википедия states, что утилита класс:

это класс, который определяет набор методов, которые выполняют общие, часто повторно используемых функций. Большинство классов полезности определяют эти общие методы под статическими (см. Статическая переменная).

Это хорошо, чтобы дать ваш служебный класс приватный конструктор (так, чтобы он никогда не может быть инициализирован) т.е.

public class SortAndRemove{ 
private SortAndRemove() { 
    throw new AssertionError(); 
} 
... // Remainder omitted 
} 

(Это обсуждается в Effective Java Джошуа Блох, кстати)

0

Это также хорошо, чтобы сделать ваш служебный класс конечным (так что никаких классов не могут простираться от вашей утилиты, потому что все методы являются статическими)

public final class SortAndRemove{ 
private SortAndRemove() { 
    throw new AssertionError(); 
} 
... // Remainder omitted 
} 
Смежные вопросы