3

挿入された要素のメソッドjava.util.Setを呼び出さない実装はありますか?hashCode()

hashCode()実装が不適切なライブラリのクラスを使用する必要があります。このhashCode()メソッドが呼び出されると、HTTP リクエストが送信されます。したがって、そのクラスのインスタンスを に配置するHashSetと、HTTP リクエストが発生します。このメソッドとの
やり取りを最小限に抑えたいと考えて います。hashCode()したがって、含まれている要素のメソッドSetを悪用しない実装が必要です。hashCode()

4

1 に答える 1

2

Object.hashCode()メソッドとSetインターフェイスのドキュメントを見てください。

TreeSet < Comparable > の使用:

import java.util.Set;
import java.util.TreeSet;

public class NoHashCode implements Comparable< NoHashCode >{

   final int value;

   public NoHashCode( int val ) {
      this.value = val;
   }

   @Override public int hashCode() {
      throw new IllegalStateException( "This method must not be called" );
   }

   @Override
   public int compareTo( NoHashCode o ) {
      return this.value - o.value;
   }

   public static void main( String[] args ) {
      Set< NoHashCode > set = new TreeSet<>();
      set.add(  new NoHashCode( 1 ));
      set.add(  new NoHashCode( 2 ));
      set.add(  new NoHashCode( 3 ));
      set.add(  new NoHashCode( 1 )); // '1' is already in set
      System.out.println( set.size());// print 3
   }
}

TreeSet< T >(コンパレータの使用):

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

public class NoHashCode {

   final int value;

   public NoHashCode( int val ) {
      this.value = val;
   }

   @Override public int hashCode() {
      throw new IllegalStateException( "This method must not be called" );
   }

   public static void main( String[] args ) {
      Set< NoHashCode > set = new TreeSet<>( new Comparator< NoHashCode >(){
         @Override public int compare( NoHashCode left, NoHashCode right ) {
            return left.value - right.value;
         }});
      set.add(  new NoHashCode( 1 ));
      set.add(  new NoHashCode( 2 ));
      set.add(  new NoHashCode( 3 ));
      set.add(  new NoHashCode( 1 )); // '1' is already in set
      System.out.println( set.size());// print 3
   }
}
于 2013-02-23T22:09:32.840 に答える