如何使用新功能扩展Java HashSet类?

时间:2018-06-24 21:28:56

标签: java android hashset

我正在制作一个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 source code中,我看到他们初始化了一个名为“ map”的变量:

map = new HashMap<>();

例如,HashSet add()函数的实现方式如下:

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

我还可以以某种方式(私有)在功能中使用“地图”吗?

1 个答案:

答案 0 :(得分:0)

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();
    }
}