是否有java.util.Set
不调用插入元素hashCode()
方法的实现?
我必须使用一些库的类,其hashCode()
实现行为不良:当hashCode()
调用此方法时,它会发送一个 HTTP 请求......因此,将该类的实例放入 aHashSet
会导致触发 HTTP 请求。
我想将与此 hashCode()
方法的交互减少到最低限度。因此,我需要一个Set
不利用其包含元素的hashCode()
方法的实现。
是否有java.util.Set
不调用插入元素hashCode()
方法的实现?
我必须使用一些库的类,其hashCode()
实现行为不良:当hashCode()
调用此方法时,它会发送一个 HTTP 请求......因此,将该类的实例放入 aHashSet
会导致触发 HTTP 请求。
我想将与此 hashCode()
方法的交互减少到最低限度。因此,我需要一个Set
不利用其包含元素的hashCode()
方法的实现。
查看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
}
}
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
}
}