Java - коллекции, поиск в коллекциях

Немного о коллекциях

Collection представляет собой группу объектов, часто называемых элементами. Некоторые реализации данного интерфейса позволяют дублирование содержащихся элементов, а некоторые нет. Некоторые хранят объекты в упорядоченном виде, а некоторые - в неупорядоченном.

List — это список объектов. Объекты можно добавлять в список (метод add()), заменять в списке (метод set()), удалять из списка (метод remove()), извлекать (метод get()). Существует также возможность организации прохода по списку при помощи итератора. Среди реализаций этого интерфейса в составе JDK имеются классы ArrayList и LinkedList.

Set — множество объектов. Те же возможности, что и у List, но объект может входить в множество только один раз. При этом напрямую получить конкретный объект из множества нельзя, можно только проверить, входит ли данный объект в множество (метод contains()). Однако можно получить итератор, который содержит все объекты из множества. Классы, реализующие интерфейс: HashSetTreeSet.

Map — отображение или ассоциативный массив. В Map добавляют не отдельные объекты, а пары объектов ( "ключ-значение" ). Соответственно есть операции поиска значения по ключу. Добавление пары с уже существующим в Map ключем приводит к замене, а не к добавлению. Из отображения (Map) можно получить множество (Set) ключей и список (List) значений. Классы, реализующие интерфейс: HashMap и TreeMap.

Сортировка в коллекциях

Теперь я расскажу как реализовать сортировку в коллекции по определенному полю элемента. Для начала создадим класс элемента коллекции, в нашем случае это будет Book.

public class Book{

      private String name// имя

      private int nPages// количество страниц   

      public Book(String bookname, int npages)

      {

            this.name=bookname;

            this.nPages=npages;

      }

      public String toString()

      {

            return "[Book: "+name + " Pages: " + nPages+"]";

      }

      public String getBookName()

      {

            return name;

      }

      public int getNPages()

      {

            return nPages;

      }

}

Данный класс очень простой, он содержит только два поля: имя книги и количество страниц. Допустим у нас есть контейнер для этого класса, который выглядит следующим образом

public class BookList{

   private TreeSet<Book> al = new TreeSet<Book>();

   public void add(Book obj) {

         al.add(obj);

   }

   public int count() {

         return al.size();

   }

   public void  print()

   {

         System.out.println(al);

   }

}

Этот контейнер предлагает следующие возможности: хранение неограниченого количества элементов Book, добавление новых элементов с помощью метода add, количество элементов в коллекции, и вывод в консоль всех элементов коллекции. Но при добавлении нового элемента, он будет записыватся в конец множества TreeSet, а мы хотим чтоб элементы автоматически сортировались по возрастанию относительно поля int nPages (количество страниц книги). Это задача решается очень просто. В классе Book необходимо реализовать интерфейс Comparable<T>. Затем переопределить метод int compareTo(Object obj). Ниже приведен пример класса Book  с необходимыми изменениями

public class Book implements Comparable<Book>{

...

public int compareTo(Object obj)

      {          

            int otherNPages = ((Book) obj).getNPages();

            if (nPages == otherNPages)

                  return 0;

            else

                  return (nPages < otherNPages) ? 1 : -1;

      }

...

}

Теперь для тех кто в танке. Метод compareTo автоматически вызывается при добавлении нового элемента и ищет куда ему вставить новый элемент в коллекцию. Он проверяет количество страниц добавляемой книги и остальных, таким образом реализуется так называемая сортировка коллекции по умолчанию. Полный исходный код с реализацией второй части задания доступен ниже.

Присоединяйся

Зарегестрируйся с помощью социальных сетей.

Публикуй

Опиши работу, прикрепи файлы и назначь цену.

Зарабатывай

Получай пассивный доход с продажи работ.

Тебе понадобится 5 минут для публикации работы на сайте.
Купить

120,00 

(без учета комиссии 3,8 %)

Java collection.zip
33544
Оцени работу

рейтинг

Поделись работой с друзьями

Мы не грузим циферки, чтоб ты увидел контент как можно быстрее;

Комментарии (0)

Gubsky

/ /

Оставить комментарий

Ты не можешь комментировать

Только зарегестрированые пользователи имеют возможность комментировать работы
Java - коллекции, поиск в коллекциях
В данной я работе я расскажу об основных видах коллекций, и на примере покажу как реализовывать свои контейнере на основе уже существующих коллекций. Создадим классы Book и Auto и реализуем для каждого свой контейнер. Также будут показаны реализации следующих вопросов "Как добавить элемент в коллекцию, чтоб вся коллекция была автоматически отсортирована по определенному полю элемента?", "Как реализовать поиск в коллекции по определенному полю элемента?".
Категория: Образование
Стоимость: 120,00