在这样的测试中:
@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());
}
Run Code Online (Sandbox Code Playgroud)
作为第二断言(= 2)不equals/hashcode使用在list.remove是default为对象.有没有办法让列表能够Arrays.equals/Arrays.hashcode用于比较数组?或者唯一的解决方案是将String数组包装在一个对象中并覆盖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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要将您的列表设置为a List<Equivalence.Wrapper<String[]>>,并使用您Equivalence的.wrap()方法插入/删除/ etc :
final Equivalence<String[]> eq = new MyEquivalence();
list.add(eq.wrap(oneValue));
list.remove(eq.wrap(anotherValue));
Run Code Online (Sandbox Code Playgroud)
使用番石榴.在我之后重复.使用番石榴:p
| 归档时间: |
|
| 查看次数: |
2115 次 |
| 最近记录: |