2017-09-06 57 views
0

我试图用下面的代码创建一个TreeSet实例。为什么last()和first()方法在java中的Set Interface中不存在

Set<Integer> treeSet = new TreeSet<>(); 
treeSet.last() //gives compilation error 
//solution here is either to cast the treeSet instance 
//Or create treeSet using TreeSet concrete class. Which is not a best practice. 

这里要做什么?提前致谢。

+0

将这个解决问题了吗? https://stackoverflow.com/questions/9322405/converting-a-treeset-to-arraylist –

回答

4

既然你需要SortedSet接口的方法,改变treeSetSortedSet类型做:

SortedSet<Integer> treeSet = new TreeSet<>(); 
treeSet.last(); 
1

设置数据结构行为不适用于排序元素。所以SET没有这些方法。 TreeSet中是因为它已经订购与

集融合+红黑树

数据结构来实现的机制来实现这一功能的中间道路。

SortedSet是为此目的而开发的另一个实现。

它使用

SortedSet<Integer> set = new TreeSet<>(); 
set.last(); 
0

设置界面没有第一个()&最后的()方法,所以使用TreeSet类型

import java.util.TreeSet; 

public class Main { 
    public static void main(String[] args) { 
     TreeSet<Integer> treeSet = new TreeSet<>(); 
     treeSet.last(); 
    } 
} 
3

Set interface没有这些方法。其他数据结构(如HashSet)实现了Set接口,它们不保证顺序,因此这些方法没有用处。

您可以使用类,而不是接口

TreeSet<Integer> treeSet = new TreeSet<>(); 
+0

我可以补充一点,'集合'不是为'last()','first'设计的: '它模拟数学设置抽象。 Set接口只包含从Collection继承的方法,并添加了禁止重复元素的限制。' 集合本身不提供这些方法 –

0

的一组表示不包含重复元素的集合。因此该接口只允许获取设置和迭代操作。

为了自己的目标继续使用TreeSet的(它实现的SortedSet)

TreeSet<Integer> treeSet = new TreeSet<>(); 
0

在你的代码treeSetSet型不具备firstlast方法。如果你将与一个TreeSet工作,你将有机会获得这些方法:

TreeSet<Integer> treeSet = new TreeSet<>(); 
treeSet.last() //gives compilation error 
//solution here is either to cast the treeSet instance 
//Or create treeSet using TreeSet concrete class. Which is not a best practice. 
0

Set接口是不被认为是有序的集合。尽管在课堂级别上并不明确,但它完全在课程的各个方面,例如iterator()

返回此集合中元素的迭代器。这些元素以特定的顺序返回(除非这个集合是某个提供担保的类的实例)。

为了有一个firstlast,您需要一个订单或索引,并且两者都不是。正如许多其他人已经指出的那样,如果您想订购,您可以使用SortedSet

TreeSet实现SortedSet,所以你当然可以修改您提供的代码:

SortedSet<Integer> treeSet = new TreeSet<>(); 
treeSet.last(); 
相关问题