На нашем сайте Вы сможете найти готовые курсовые и дипломные работы по программированию
Сейчас работаем

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 автоматически вызывается при добавлении нового элемента и ищет куда ему вставить новый элемент в коллекцию. Он проверяет количество страниц добавляемой книги и остальных, таким образом реализуется так называемая сортировка коллекции по умолчанию. Полный исходный код с реализацией второй части задания доступен ниже.

Купить 900,00 
Сразу после оплаты Вы получите работу на электронную почту. Файлы отправляются автоматически. Исходник программ Вы сможете отредактировать, как Вам нужно.
Комментарии (0)

Gubsky

/ /

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

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

Только зарегистрированые пользователи имеют возможность комментировать работы
Похожие работы
Тип Название Рейтинг Категория Стоимость
Лабораторная Наследование в Java 6 Java 900,00
Статья Поиск дубликатов C# 12 .NET (C#) бесплатно
Курсовая Учет кадров на предприятии Java Eclipse + SQLite 0 Java 399,00
Лабораторная Работа с интерфейсами в Java. Абстрактные классы. 2 Java 900,00
Лабораторная Исходник java - работа с матрицами и массивами 8 Java 900,00
Другие работы автора
Тип Название Рейтинг Категория Стоимость
Лабораторная Работа с интерфейсами в Java. Абстрактные классы. 2 Java 900,00
Лабораторная Наследование в Java 6 Java 900,00
Лабораторная Исходник java - работа с матрицами и массивами 8 Java 900,00
Новые работы
Тип Название Рейтинг Категория Стоимость
Контрольная Театр (C#, WinForms, Access) new 0 .NET (C#) 1 500,00
Исходник Автошкола (C#, WPF, SQL Server, SQLite) new 0 .NET (C#) 2 500,00
Исходник Программа Парадокс дней рождения Python new 0 Python 700,00
Исходник ИС Налогоплательщики С# + SQL Server new 0 .NET (C#) 2 500,00
Исходник Логическая игра "Бейглз" Python new 0 Python 700,00
Купить

900,00 

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

Заказать через

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

рейтинг

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