2017-06-12 6 views
-1

を作成し、私は限られたHashSetを作成しようとしているので、それはErrorをスローし、は、指示に聞かないでください。 これまでのコードはそのように限定されるものでHashSetの

import java.util.HashSet; 
public class LimitedHashSet<E> extends HashSet<E>{ 
    public LimitedHashSet(){ 
     super(); 
    } 

    @Override 
    public int size() { 
     return super.size(); 
    } 

    private class LimitedHashSetError{ 
     LimitedHashSetError(){ 
      if (size() > 1024){ 
       throw new Error("LimitedHashSetError"); 
      } 
     } 
    } 
    public static void main(String[] args) { 
      LimitedHashSet<Integer> lhs = new LimitedHashSet<>(); 
      for (int i = 0; i < 1026 ; i++) { 
       lhs.add(i); 
      } 
     } 
} 

ですが、何も起こりません。

+0

クラス「LimitedHashSetError」はどのように動作するはずですか?どこでも使用されていません – ByeBye

+0

@ByeByeは、要素の量が限られている点を除いて、通常の 'HashSet'のように動作します。 –

+1

'add(i)'を1026回呼び出すだけです。どこで限界をチェックすべきですか? –

答えて

4

あなたは決してLimitedHashSetErrorをインスタンス化しないので、決してサイズをチェックしません。私はすべてのadd(All)後に呼び出されますチェックインの方法を好む:

public class LimitedHashSet<E> extends HashSet<E>{ 

    @Override 
    public boolean add(E e) { 
     boolean result = super.add(e); 
     checkSize(); 
     return result; 
    } 

    @Override 
    public boolean addAll(Collection<? extends E> c) { 
     boolean result = super.addAll(c); 
     checkSize(); 
     return result; 
    } 

    private void checkSize() { 
     if (size() > 1024){ 
      throw new Error("LimitedHashSetError"); 
     } 
    } 
} 
+0

追加後にサイズをチェックするので有効ではありません - >エラーをキャッチするとセットが間違った状態になる – ByeBye

+0

私はこれを疑っていましたが、 "spec"は余分な要素を追加しないかどうかを指定しません。制限を超えるサイズの要素を追加する必要があります。 –

+1

@ByeByeその場合、追加する値がすでにセットに入っているかどうかをチェックする必要があります。セットに1から1024の値が入っていて、1を追加するとエラーが発生します。 –

0

あなたのクラスに二つの方法addAlladdをオーバーライドする必要があります。

@Override 
public boolean addAll(final Collection<? extends E> c) { 
    boolean a = true; 
    for(final E e: c) { 
     a = a && add(e); 
    } 
    return a; 
} 

@Override 
public boolean add(final E e) { 
    if (size() + 1 > 1024 && !contains(e)){ 
     throw new Error("LimitedHashSetError"); 
    } 
    return super.add(e); 
} 
+1

セットに1024個の要素があり、既存の要素を追加するとエラーになります。 –

+0

私は編集しました。今すぐチェック – ByeBye

+1

'add()'はまだ間違っていると思います。要素が(潜在的に)追加される前にチェックしています。 –

1

あなたが行う必要があります。

@Override 
public boolean add(E e) { 
    boolean x = super.add(e); 
    if (size() > 1024) { 
     throw new Error("Limited Hash Set Error"); 
    } 
    return x; 
} 

@Override 
public boolean addAll(Collection<? extends E> c) { 
    boolean x = super.addAll(c); 
    if (size() > 1024) { 
     throw new Error("LimitedHashSetError"); 
    } 
    return x; 

} 
関連する問題