Как расширить класс Java HashSet с новой функцией? - PullRequest
0 голосов
/ 25 июня 2018

Я делаю приложение для Android.Я хотел бы расширить класс HashSet и добавить к нему новую функцию, которая выбирает случайный элемент из набора.Все остальное должно вести себя как обычный HashSet.

Так что я подумал о наличии этого класса:

public class RandomHashSet<E> extends HashSet<E> {
    private Random mRand = new Random();

}

И я хочу добавить к нему функцию, которая выполняет этот код для HashSet:

if (set.size() == 0) {
    return null; 
}
int index = mRand.nextInt(set.size());
Iterator<Object> iter = set.iterator();
for (int i = 0; i < index; i++) {
    iter.next();
}
return iter.next();

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

В Исходный код HashSet Я вижу, что они инициируют переменную с именем 'map':

map = new HashMap<>();

Например, функция add () HashSet реализована следующим образом:

public boolean add(E e) {
        return map.put(e, PRESENT)==null;
}

Могу ли я как-то использовать 'map' в своей функции (будучи приватной)?

1 Ответ

0 голосов
/ 25 июня 2018
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;

public class RandomHashSet<E> extends HashSet<E> {
    private Random mRand = new Random();

    public E randomElement() {
        if (size() == 0) {
            return null;
        }
        int index = mRand.nextInt(size());
        Iterator<E> iter = iterator();
        for (int i = 0; i < index; i++) {
            iter.next();
        }
        return iter.next();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...