Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2







Скачать 265.36 Kb.
НазваниеПрограмма по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2
страница1/6
Дата публикации16.01.2014
Размер265.36 Kb.
ТипЛабораторная работа
100-bal.ru > Военное дело > Лабораторная работа
  1   2   3   4   5   6

ЛАБОРАТОРНАЯ РАБОТА 6

Тема: Классы-коллекции

Цели работы:


  1. Познакомиться с классами-коллекциями Java.

  2. Научиться строить приложения на Java с использованием классов-коллекций.



Порядок выполнения работы


Изучить особенности реализации склассов-коллекций в Java.

Построить приложения в соответствии с заданием. Приложения должны показывать особенности реализации в Java, могут подсчитывать временные характеристики и т. п. Для исходных данных коллекций можно использовать свойства системы, применяя класс Properties, или строки из текстовых файлов, или пользовательского ввода, или полученные по сети. Возможно создание серверов, поддерживающих связь с несколькими клиентами. Для организации такой связи также можно использовать коллекции. В программах применяйте методы для обработки элементов коллекций. При создании приложений желательно использовать дополнительные классы-утилиты Java, описанные в приложении appdoc.doc.

Вариант 1. Создать приложение двойного назначения, иллюстрирующее, по возможности, особенности применения классов Vector, Stack, Hashtable. Приложение должно иметь графический интерфейс.

Вариант 2. Создать приложение двойного назначения, иллюстрирующее, по возможности, особенности применения классов ArrayList, LinkedList. Приложение должно иметь графический интерфейс.

Вариант 3. Создать приложение двойного назначения, иллюстрирующее различия в классах ArrayList и Vector. Приложение должно иметь графический интерфейс.

Вариант 4. Создать приложение двойного назначения, иллюстрирующее, по возможности, особенности применения классов HashMap, TreeMap. Приложение должно иметь графический интерфейс.

Вариант 5. Создать приложение двойного назначения, иллюстрирующее, по возможности, особенности применения классов HashSet, TreeSet. Приложение должно иметь графический интерфейс.

Вопросы для самопроверки и защиты


  1. Что такое класс Vector? Для чего он используется? Каковы его достоинства и недостатки?

  2. Назовите особенности организации класса Stack.

  3. Для чего применяется класс Hashtable? Что такое коэффициент загруженности?

  4. Что такое емкость класса-коллекции?

  5. Назначение и особенности применения класса Properties.

  6. Расскажите о иерархии интерфейсов коллекций Java. Объясните назначение каждого интерфейса.

  7. Каково назначение интерфейса Collection?

  8. Опишите возможности применения интерфейсов Map, Set и List.

  9. Для чего применяются интерфейсы Iterator и ListIterator?

  10. Опишите классы ArrayList и LinkedList.

  11. Опишите классы HashSet, TreeSet.

  12. Опишите классы HashMap, TreeMap.

  13. Какие алгоритмы для обработки коллекций существуют в Java и как их использовать?



Краткие теоретические сведения

Классы-коллекции


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

В языке Java с самых первых версий был разработан класс Vector, предназначенный для хранения переменного числа элементов.

Класс Vector


В классе Vector из пакета java.util хранятся элементы типа Object, а значит, любого типа. Количество элементов может быть любым и наперед не определяться. Элементы получают индексы 0, 1, 2, .... К каждому элементу вектора можно обратиться по индексу, как и к элементу массива.

Кроме количества элементов, называемого размером (size) вектора, есть еще размер буфера — емкость (capacity) вектора. Обычно емкость совпадает с размером вектора, но можно ее увеличить методом ensureCapacity(int minCapacity) или сравнять с размером вектора методом trimToSize().

В Java 2 класс Vector был переработан, чтобы включить его в иерархию классов-коллекций. Поэтому многие действия можно совершать старыми и новыми методами. Рекомендуется использовать новые методы, поскольку старые могут быть исключены из следующих версий Java.

В классе четыре конструктора:

Vector () — создает пустой объект нулевой длины;

Vector (int capacity) — создает пустой объект указанной емкости capacity;

Vector (int capacity, int increment) — создает пустой объект указанной емкости capacity и задает число increment , на которое увеличивается емкость при необходимости;

Vector (Collection с) — вектор создается по указанной коллекции. Если capacity отрицательно, создается исключительная ситуация. После создания вектора его можно заполнять элементами.

Метод add (Object element) позволяет добавить элемент в конец вектора (то же делает старый метод addElement (Object element) .

Методом add (int index, Object element) или  старым методом  insertElementAt (Object element, int index) можно вставить элемент в указанное место index . Элемент, находившийся на этом месте, и все последующие элементы сдвигаются, их индексы увеличиваются на единицу.

Метод addAll (Collection coll) позволяет добавить в конец вектора все элементы коллекции coll .

Методом addAll(int index, Collection coll) возможно вставить в позицию index все элементы коллекции coll .

Метод set (int index, object element) заменяет элемент, стоявший в векторе в позиции index , на элемент element (то же позволяет выполнить старый метод setElementAt (Object element, int index)).

Количество элементов в векторе всегда можно узнать методом size().

Метод capacity() возвращает емкость вектора.

Логический метод isEmpty() возвращает true, если в векторе нет ни одного элемента.

Обратиться к первому элементу вектора можно методом firstEiement() , к последнему — методом lastEiement() , к любому элементу — методом get(int index) или старым методом elementAt (int index).

Эти методы возвращают объект класса Object . Перед использованием его следует привести к нужному типу.

Получить все элементы вектора в виде массива типа Object[] можно методами toArray( ) и toArray (Object [] а). Второй метод заносит все элементы вектора в массив а, если в нем достаточно места.

Логический метод contains (Object element) возвращает true, если элемент element находится в векторе.

Логический метод containsAll (Collection с) возвращает true, если вектор содержит все элементы указанной коллекции.

Четыре метода позволяют отыскать позицию указанного элемента element:

indexof (Object element) — возвращает индекс первого появления элемента в векторе;

indexOf (Object element, int begin) — ведет поиск, начиная с индекса begin включительно;

lastIndexOf (object element) — возвращает индекс последнего появления элемента в векторе;

lastIndexOf (Object element, int start) — ведет поиск от индекса start включительно к началу вектора.

Если элемент не найден, возвращается —1.

Логический метод remove (Object element) удаляет из вектора первое вхождение указанного элемента element . Метод возвращает true , если элемент найден и удаление произведено.

Метод remove (int index) удаляет элемент из позиции index и возвращает его в качестве своего результата типа object .

Аналогичные действия позволяют выполнить старые методы типа void:

removeElement (Object element) И removeElementAt (int index) , не возвращающие результата.

Удалить диапазон элементов можно методом removeRange(int begin, int end) , не возвращающим результата. Удаляются элементы от позиции begin включительно до позиции end исключительно.

Удалить из данного вектора все элементы коллекции coll возможно логическим Методом removeAll(Collection coll).

Удалить последние элементы можно, просто урезав вектор методом

setSize(int newSize).

Удалить все элементы, кроме входящих в указанную коллекцию coil , разрешает логический метод retainAll(Collection coll).

Удалить все элементы вектора можно методом clear () или старым методом

removeAllElements () или обнулив размер вектора методом setSize(0).
Пример 1. Работа с вектором

Vector v = new Vector();

String s = "Строка, которую мы хотим разобрать на слова.";

 StringTokenizer st = new StringTokenizer(s, " \t\n\r,.");

 while (st.hasMoreTokens()){

   // Получаем слово и заносим в вектор

  v.add(st.nextToken());   // Добавляем в конец вектора 

}

System.out.println(v.firstElement());       // Первый элемент 

System.out.println(v.lastElement());        // Последний элемент

v.setSize(4);                              // Уменьшаем число элементов 

v.add("собрать.");                          // Добавляем в конец укороченного вектора

v.set(3, "опять");                          // Ставим в позицию 3 

for (int i = 0; i < v.size(); i++)         // Перебираем весь вектор

System.out.print(v.get(i) + " "); 

System.out.println();

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

Класс Stack


Класс Stack из пакета java.util. объединяет элементы в стек. Класс Stack расширяет класс Vector.

Стек (stack) реализует порядок работы с элементами подобно магазину винтовки— первым выстрелит патрон, положенный в магазин последним,— или подобно железнодорожному тупику — первым из тупика выйдет вагон, загнанный туда последним. Такой порядок обработки называется LIFO (Last In — First Out).

Перед работой создается пустой стек конструктором Stack ().

Затем на стек кладутся и снимаются элементы, причем доступен только "верхний" элемент, тот, что положен на стек последним.

Дополнительно к методам класса Vector класс Stack содержит пять методов, позволяющих работать с коллекцией как со стеком:

push (Object item) —помещает элемент item в стек;

pop () — извлекает верхний элемент из стека;

peek () — читает верхний элемент, не извлекая его из стека;

empty () — проверяет, не пуст ли стек;

search (Object item) — находит позицию элемента item в стеке. Верхний элемент имеет позицию 1, под ним элемент 2 и т. д. Если элемент не найден, возвращается — 1.
Пример 2. Проверка парности скобок 

import java.utii.*; 

class StackTest{

static boolean checkParity(String expression, String open, String close){ 

   Stack stack = new Stack (); 

   StringTokenizer st = new StringTokenizer(expression, " \t\n\r+*/-(){}", true);

   while (st.hasMoreTokens ()) {

     String tmp = st.nextToken();

     if (tmp.equals(open)) stack.push(open);

     if (tmp.equals(close)) stack.pop(); 

  }

  if (stack.isEmpty () ) return true;

return false; 

}

public static void main(String[] args){ 

  System.out.println(

          checkParity(”a - (b - (c - a) / (b + c) - 2) ”, "(", ")”); 

 } 

}

Как видите, коллекции значительно облегчают обработку наборов данных.

Еще один пример коллекции совсем другого рода — таблицы — предоставляет класс Hashtable.
  1   2   3   4   5   6

Добавить документ в свой блог или на сайт

Похожие:

Программа по формированию навыков безопасного поведения на дорогах и улицах «Добрая дорога детства» 2 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Проектно-образовательная деятельность по формированию у детей навыков безопасного поведения на улицах и дорогах города">