Delphi | Сети | ПК | Маршрутизаторы | Моделирование | Протоколы | Экспертные системы | Удаленный доступ | Доменные имена
Аплеты | SQL | Надежность | Задачи | Информационные процессы | JAVA | Отказы изделия | Расчет надежности показателей | Инфсис

Классы-коллекции, программирование в Java

В рамках одного класса могут присутствовать несколько методов с одним и тем же названием, отличающихся друг от друга только количеством и/или типом параметров. Нельзя определить два метода с одинаковыми названиями, отличающиеся только типом возвращаемого значения. Метод, название которого совпадает с именем класса, называется конструктором и вызывается при создании объекта командой new. Конструкторов с разными списками параметров может быть несколько.

В листинге 5.2 мы разобрали строку на слова. Как их сохранить для дальнейшей обработки?

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

Кроме того, массивы всегда имеют постоянную, предварительно заданную, длину, в массивы неудобно добавлять элементы. При удалении элемента из массива оставшиеся элементы следует перенумеровывать.

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

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

Класс Vector

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

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

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

Для очередного вывода сообщения создадим пользовательский метод mypaint. Он получает контекст устройства из апплета с помощью метода getGraphics (наш поток имеет доступ к апплету, поскольку принадлежит к внутреннему классу). public void mypaint() { Graphics g=getGraphics(); if (g!=null) { g.setColor(col); g.drawString(mes, x,y); } } В классе апплета содержится только одна функция - init. В этой функции создается два объекта-потока (обратите внимание, что они оба безымянные), и эти потоки сразу же запускаются на выполнение вызовом их метода start. public class potoki extends Applet { public void init() { new myThread("Изучаем Java",0xff5555, "se", 700).start(); new myThread("Изучаем Java",0x5555ff, "ne", 1000).start(); } class MyThread extends Thread { // определение класса MyThread } } Бывают ситуации, когда два и более различных потока должны получать доступ к одним и тем же переменным. Тогда программисту требуется обеспечить контроль доступа к этим переменным, другими словами, синхронизировать действия потоков. Существуют два уровня обеспечения синхронизации: " защита совместно используемых ресурсов; " сигнализация об изменениях между потоками.