在这样的测试中:
@Test
public void test() {
List<String[]> l = new LinkedList<String[]>();
l.add(new String [] {"test", "123"});
l.add(new String [] {"test", "456"});
l.add(new String [] {"test", "789"});
assertEquals(3, l.size());
l.remove(new String [] {"test", "456"});
assertEquals(2, l.size());
}
第二个断言(=2)失败,因为equals/hashcode
用于list.remove
是default
对于对象。
有没有办法让列表能够使用Arrays.equals/Arrays.hashcode
比较数组?或者唯一的解决方案是将字符串数组包装在一个对象中并覆盖equals/hashcode
?
使用番石榴,有。您将需要实施一个Equivalence<String[]>:
public final class MyEquivalence
extends Equivalence<String[]>
{
@Override
protected boolean doEquivalent(final String[] a, final String[] b)
{
return Arrays.equals(a, b);
}
@Override
protected int doHash(final String[] t)
{
return Arrays.hashCode(t);
}
}
然后你需要让你的清单成为List<Equivalence.Wrapper<String[]>>
,并使用您的插入/删除/等Equivalence
's .wrap()
method:
final Equivalence<String[]> eq = new MyEquivalence();
list.add(eq.wrap(oneValue));
list.remove(eq.wrap(anotherValue));
使用番石榴。跟着我重复一遍。使用番石榴:p
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)