2015-02-04 2 views
3

Я действительно застрял на задании для школы. Мы узнаем о родовых типов, а может быть, это я не только понимая их полностью, но в рамках одного из первых методов, которые мы должны реализовать:Java Collection <Generic Type> Сортировка без коллекций

Мы имеем:

public static <T> T min(Collection<T> c, Comparator<T> comp) { 
     return null 
} 

И требования:

Выбирает минимальное значение из Collection c, как определено прилагается Comparator comp. Этот метод генерирует IllegalArgumentException , если либо c, либо comp равно null, и он выбрасывает NoSuchElementException, если c пуст. Этот метод не изменяет Collection c.

Так я стал сюда:

public static <T> T min(Collection<T> c, Comparator<T> comp) 
      throws IllegalArgumentException, NoSuchElementException { 
     if (c != null && comp != null) { 
      if (!c.isEmpty()) { 

      } else { 
       throw new NoSuchElementException(); 
      } 
     } else { 
      throw new IllegalArgumentException(); 
     } 
    } 

Мы должны разобраться с использованием компаратора, но не может использовать класс Collections. Мне действительно нужно какое-то направление, чтобы начать, я не прошу вас выполнить задание для меня!

+0

Arrays.sort()? http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator) – robert

+2

@robert Работа с использованием 'Коллекций. sort' с помощью версии 'Arrays', вероятно, не то, что имел в виду преподаватель. – blgt

+1

Так что абстрактно абстрагироваться, если у вас есть список, заполняющий что-то ... Я не знаю, игрушки (?), как бы вы могли найти наименее тяжелый из игрушек? – ControlAltDel

ответ

6

Это должно быть легко. Компаратор используется для сравнения двух элементов не для сортировки. Сортировка здесь не нужна. Вы не хотите менять коллекцию, просто найдите минимальное значение. Вы можете просто взять первый и перебрать коллекцию, сравнивая выбранный элемент с другими, переключая выбранный элемент на другой, когда он больше. Это способ найти минимум.

+1

Большое спасибо за указания «только намек» haha ​​ – acupajoe

+0

Я думаю, что это хорошо.Когда вы получите подсказку, вы узнаете больше. –

+0

Так что, по сути, это то же самое, что и обычная функция min, но не универсальная, но с типичной типизацией? Есть ли способ дать общее значение «T» переменной null? Eclipse жалуется на то, что null или false, или 0 не является переменной . – acupajoe

2

псевдокод, что вам нужно добавить к вашему примеру:

  • Сохранить первый элемент в переменном вызове «минимальный». Поскольку объявляется общий тип объекта, это T.
  • Итерировать коллекцию (Clue: каждая коллекция имеет итератор)
  • Сравните каждый элемент с найденным «минимальным». Если это меньше, чем назначить его минимуму.
  • Верните переменный минимум.

Я не стану кодом, поскольку это домашнее задание, и вам нужно ознакомиться с синтаксисом.

Смежные вопросы