[英]java 2D Arrays - sorting and searching
最近,在为大学做作业时,我遇到的一件事就是整理和搜索2D阵列。 使用Arrays.sort(example);
或Arrays.binarySearch(example, "xyz");
返回错误:
示例无法强制转换为java.lang.Comparable
我不得不使用嵌套for循环,而不是二进制搜索,尽管我希望以有效的方式做到这一点。
我遇到的另一个问题是使用Arrays.asList(example).contains("xyz");
,似乎从来没有工作过。 然后我使用了System.out.println(Arrays.asList(example));
检查出了什么问题。 这就是我得到的:
[[I @ 1575c7e,[I @ 795f24,[I @ 554210,[I @ 16433e4,[I @ 18ada25,[I @ f7bd29,[I @ a3cf3e,[I @ 7af3e0,[I @ 21151e,[I @ 1f194d9] ]
那是什么,最重要的是解决这些问题的最佳方法是什么?
还有一个后续问题 - 为什么有些错误(比如example cannot be cast to java.lang.Comparable
只会在程序运行时出现,而不是在编译时出现?
很感谢任何形式的帮助。
除了deepHashCode
和deepEquals
之外, java.util.Arrays
不会递归地对数组进行操作。
例如:
int[ ][ ] arr = new int[ h ][ w ];
Arrays.sort( arr ); \\ Sorts int[ ] not ints
Arrays.asList( arr ); \\ Returns List< int[ ] >
相对于整个阵列对2D阵列进行排序并不是很有意义,最好只将它存储为一维阵列。 二进制搜索2D数组也是如此。
如果要对对象进行排序,有两种方法可以执行此操作。 最好的方法是让类实现java.lang.Comparable
。 如果您无法编辑该类或想要提供多种方法对对象进行排序,则可以实现java.util.Comparator
并将其实例传递给Arrays.sort
。
为了使用java.util.Arrays
对数组进行排序或搜索,数组对象的类型必须实现java.lang.Comparable
,您必须提供java.util.Comparator
的实例。 请记住,它必须与在数组的第一级找到的对象类型相同。
例如:
int[ ] arr1 = ...; \\ Type of first level is int
int[ ][ ] arr2 = ...; \\ Type of first level is int[ ]
int[ ][ ][ ] arr3 = ...; \\ Type of first level is int[ ][ ]
第一个问题 :
示例无法强制转换为java.lang.Comparable
example
的项目应该实现Comparable接口并覆盖方法Compare()
否则Arrays.sort()
不会“知道”按哪个顺序对项目进行排序。
第二个问题 ,打印显示为:
[[I@1575c7e, [I@795f24, [I@554210, [I@16433e4, [I@18ada25, [I@f7bd29, [I@a3cf3e, [I@7af3e0, [I@21151e, [I@1f194d9]
从中实例化example
的元素的类也应该重写方法toString() ,以便很好地表示您正在打印的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.