2017-09-06 8 views
0

以下のコードを使用してTreeSetインスタンスを作成しようとしていました。JavaのSetインターフェイスにlast()メソッドとfirst()メソッドが存在しない理由

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

:あなたは確かにあなたの供給のコードを変更することができるように

TreeSetは、SortedSetを実装しますか? https://stackoverflow.com/questions/9322405/converting-a-treeset-to-arraylist –

答えて

4

を使用してそれを実行します。

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

セットデータ構造の振る舞いは、要素を注文するためのものではありません。 SETはこれらのメソッドを持っていません。 TreeSetのは、それが

セットの融合+赤黒木

データ構造を用いて実装メカニズムを発注しているとして、この機能を実現するために、中央の方法です。

SortedSetは、この目的のために開発された別の実装です。

あなたがSortedSetインターフェイスのメソッドを必要とするため、SortedSettreeSetの種類を変更

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

'Set'は' last() '、' first'のために設計されていないと付け加えることができます: 'それは数学的なモデルです抽象を設定します。 Setインターフェイスには、Collectionから継承されたメソッドのみが含まれ、重複する要素が禁止されているという制限が追加されています。 コレクション自体はこれらのメソッドを提供しません –

0

の代わりにクラスを使用することができます。したがって、インタフェースでは、get setおよびiterateアクションのみが許可されます。あなたの目標のために

あなたのコードtreeSetで(にSortedSetを実装)TreeSetの

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

を継続して使用するには、firstまたはlastメソッドを持っていないタイプSetです。

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インタフェースを注文するとは考えられないコレクションです:あなたはTreeSetので動作します場合は、それらのメソッドにアクセスできるようになります。これはクラスレベルでは明示的ではありませんが、クラスのメソッドのすべてが対象です。 iterator()

このセットの要素のイテレータを返します。要素は、(このセットが保証を提供するいくつかのクラスのインスタンスでない限り)特定の順序で返されません。

firstおよびlastを使用するには、順序またはインデックスが必要であり、Setにもありません。他の多くの人々がすでに指摘しているように、ご希望の場合はSortedSetを使用することができます。これはあなたの問題を解決するだろう

SortedSet<Integer> treeSet = new TreeSet<>(); 
treeSet.last(); 
関連する問題