Приветствую Вас ГостьВторник, 14.05.2024, 04:49

Программирование на Java, Android, Delphi


Блог

Главная » 2013 » Март » 15 » Collections Framework: класс HashSet
17:10
Collections Framework: класс HashSet
Класс HashSet наследуется от AbstractSet и реализует обобщенный интерфейс Set. Класс также является обобщенным. Коллекция хранит уникальные объекты. Для того, чтобы коллекция могла производить сравнение объектов при добавлении в коллекцию, а также осуществлять проверку на вхождение объекта в коллекцию, класс объекта-элемента коллекции должен реализовывать методы equals() и hashCode(). Метод equals() должен возвращать результат логического сравнения объектов, метод hashCode() логически равных объектов должен возвращать одинаковое значение. В общем случае, метод hashCode() должен вычисляться по всем полям, по которым идет сравнение в equals().

Класс HashSet не хранит объекты в том порядке, в котором элементы добавляются в коллекцию. Операции добавления и удаления из HashSet осуществляются за константное время не зависимо от количества элементов в коллекции (это методы add(), contains(), remove(), size()), так как элементы не упорядочиваются в коллекции. Пример работы с коллекцией:
//класс с координатами - элемент коллекции
class Coordinate{
private int X;
private int Y;

public Coordinate(int X, int Y) {
this.X = X;
this.Y = Y;
}

@Override
public String toString() {
return "X: " + X + ", Y: " + Y;
}

@Override
public boolean equals(Object obj) {
if(obj instanceof Coordinate){
Coordinate c = (Coordinate)obj;
return c.X == this.X && c.Y == this.Y;
}else {
return super.equals(obj);
}
}

@Override
public int hashCode() {
int hash = 7;
hash = 59 * hash + this.X;
hash = 59 * hash + this.Y;
return hash;
}
}


void CollectionToTextArea(HashSet<Coordinate> c, JTextArea ta){
for(Coordinate item: c){ta.append(item.toString() + "\n");
}
ta.append("--------------------------------------------------" + "\n");
}

void CoordinateToTextArea(Coordinate c, JTextArea ta, String comment){
if(c != null){
ta.append(comment + c.toString() + "\n");
}
}

//выводим все содержимое очереди в текстовую область (при этом очередь очищается)
void RemoveAllQueueElements(Queue <Coordinate> q){
Coordinate c = null;
c = q.poll();
while(c != null) {
jTextArea1.append("Удалили из очереди: " + c.toString() + "\n");
c = q.poll();
}
}

void IteratorToTextArea(Iterator <Coordinate> iter, JTextArea ta){
if (iter != null & ta != null){
while(iter.hasNext()){
ta.append(iter.next().toString() + "\n");
}
}
};



private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
//создаем коллекцию хеш-таблицу
HashSet <Coordinate> hs = new HashSet <Coordinate>();
//будем осуществлять доступ к коллекции через интерфейс Set
Set <Coordinate> sitf = hs;

//добавляем элемнты в коллекцию
for(int i = 0; i < 10; i ++){
sitf.add(new Coordinate(i, i));
}

//выводим коллекцию в текстовую область - выводятся элемнты
//не в том порядке котором добавлялись в коллекцию
CollectionToTextArea(hs, jTextArea1);

//выводим через итератор в текстовую область
//получаем тот же результат, что и выше
IteratorToTextArea(sitf.iterator(), jTextArea1);

//осуществляем поиск созданной координаты в хеш-таблице
Coordinate c = new Coordinate(5, 5);
if (sitf.contains(c))
CoordinateToTextArea(c, jTextArea1, "Найден элемнт в коллекции типа HashSet:");
}
Категория: Java (Библиотека, пакеты Java) | Просмотров: 820 | Добавил: alex | Теги: hashCode, заказать разработку программ, программист в Рыбинске, Collections Framework, Java, equals, HashSet | Рейтинг: 5.0/2
Категории раздела
Java (Общие вопросы) [17]
Java (Библиотека, пакеты Java) [17]
Java (Разработка программного обеспечения на Java) [5]
Java (Среда разработки NetBeans) [5]
JSF + PrimeFaces [21]
Java EE [11]
Разное [3]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Поиск
Календарь
«  Март 2013  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031
Архив записей