是的,List 可以是关键
是的,您可以使用 List 作为地图的键。
警告:如果使用依赖于Object::hashCode 的结果的Map 实现来跟踪密钥,那么您必须确保您的List 总是 返回相同的哈希值代码值。对于List,这意味着列表中的所有对象都必须返回相同的哈希码值,并且您不能在列表中添加或删除对象。
如下图所示,IdentityHashMap 和EnumMap 是两个不依赖于Object::hashCode 的实现。
为键定义一个类
或者,创建一个类来保存您的一对 Integer 对象。
package work.basil.example;
import java.util.Objects;
public class IntegerPair
{
public Integer first, second;
public IntegerPair ( Integer first , Integer second )
{
this.first = Objects.requireNonNull( first );
this.second = Objects.requireNonNull( second );
}
@Override
public boolean equals ( Object o )
{
if ( this == o ) return true;
if ( o == null || getClass() != o.getClass() ) return false;
IntegerPair that = ( IntegerPair ) o;
return first.equals( that.first ) &&
second.equals( that.second );
}
@Override
public int hashCode ( )
{
return Objects.hash( first , second );
}
@Override
public String toString ( )
{
return "IntegerPair{ " +
"first=" + first +
" | second=" + second +
" }";
}
}
使用IntegerPair 的实例作为地图的键。
Map < IntegerPair, String > pairToString = new HashMap <>( 3 );
pairToString.put( new IntegerPair( 10 , 11 ) , "Ones" );
pairToString.put( new IntegerPair( 20 , 21 ) , "Twos" );
pairToString.put( new IntegerPair( 30 , 31 ) , "Threes" );
转储到控制台。
System.out.println( "pairToString.toString(): " + pairToString );
pairToString.toString(): {IntegerPair{ first=10 | second=11 }=Ones, IntegerPair{ first=20 | second=21 }=Twos, IntegerPair{ first=30 |秒=31 }=三个}