我正在制作一个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;
}
我还可以以某种方式(私有)在功能中使用“地图”吗?
答案 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();
}
}