将T first()方法用于类Hashset的Java实现<;T>;

将T first()方法用于类Hashset的Java实现<;T>;,java,data-structures,Java,Data Structures,下面的练习我有困难。我不知道该怎么办。我知道我应该使用某种迭代,但我不确定。我已经能够用二进制搜索树实现T first()方法,但不能用哈希集实现 将以下方法添加到类HashSet中,并编写合适的测试程序。 T first() //集合中的最小值(如果集合为空 //抛出NoTouchElementException) import java.util.*; 导入java.lang.Iterable; 类HashSet实现Iterable{ 私有链接集[]哈希表;//哈希表 HashSet(){/

下面的练习我有困难。我不知道该怎么办。我知道我应该使用某种迭代,但我不确定。我已经能够用二进制搜索树实现T first()方法,但不能用哈希集实现

将以下方法添加到类HashSet中,并编写合适的测试程序。
T first()
//集合中的最小值(如果集合为空
//抛出NoTouchElementException)

import java.util.*;
导入java.lang.Iterable;
类HashSet实现Iterable{
私有链接集[]哈希表;//哈希表
HashSet(){//创建空集
hashTable=(LinkedSet[])(新的LinkedSet[1000]);
//注意编码技巧!
对于(int i=0;i您可以:

  • 遍历值:try for(tx:the_set)

  • 取最小值:取第一个,一次迭代,如果new更少,则取它

  • 返回该值(如果没有值,则返回异常)

试着完成这个

public static <T> T first(HashSet<T> _ht)
{
// if _ht empty throws an exception
// TODO

// Take the first (or any element)
// TODO
T least; 

for (T one_element: _ht)
  {
    // compare one_element and least
    // TODO 
    // and keep the least !
  }

return least;
}
publicstatict优先(HashSet\u-ht)
{
//如果为空,则抛出异常
//待办事项
//以第一个(或任何元素)为例
//待办事项
至少;
对于(一个元素:_-ht)
{
//比较一个元素和最少的元素
//待办事项
//保留最少的!
}
回报最少;
}

我同意Peter的评论,
HashSet
没有“first”或“last”的概念,因为它不是有序的。但是,有一个类实现了
SortedSet

元素类型必须定义自然顺序(例如
int
,或
Comparable
),否则必须向树集的构造函数提供
比较器

例如:

Integer[] numbers = { 5, 9, 1, 11 };
TreeSet<Integer> set = new TreeSet<>(Arrays.asList(numbers));
Integer least = set.first();  // 1

HashSet没有顺序,也没有“最小”值的概念。您可以只返回由
iterator()
返回的第一个值,但这是一个任意选择。在我的一个treeset练习中,我实现了相同的方法。这是否正确?t first(){Node p=root;while(p!=(null)){p=p.left;}return(p.item);@Scolgo:看起来
p
总是
null
。我更新了我的答案。如果我要遍历这些值,我就不需要将集合名传递给方法。T first()我试图测试我的实现。我的迭代器有问题。公共迭代器迭代器(){ArrayList items=new ArrayList();例如(LinkedSet ls:hashTable)for(T T:ls)items.add(T);return items.iterator();}它在HashSet.iterator(HashSet.java:60)在Prog.first(Prog.java:14)在main1.main(main1.java:20)中给出了线程“main”中的errorException?
Integer[] numbers = { 5, 9, 1, 11 };
TreeSet<Integer> set = new TreeSet<>(Arrays.asList(numbers));
Integer least = set.first();  // 1
public T first() {
    Node<T> p = root;
    if (p != null) {
        while (p.left != null) {  // not "while (p != null)"
            p = p.left;
        }
    }
    return p == null ? null : p.item;
}