gpt4 book ai didi

java 二维数组 - 排序和搜索

转载 作者:行者123 更新时间:2023-11-29 05:07:56 25 4
gpt4 key购买 nike

最近,在做大学作业时,我遇到的一件事是对二维数组进行排序和搜索。使用 Arrays.sort(example);Arrays.binarySearch(example, "xyz"); 返回错误:

example cannot be cast to 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 只在程序运行时出现,而不是在编译时出现?

非常感谢任何帮助。

最佳答案

java.util.Arrays,除了deepHashCodedeepEquals,不对数组进行递归操作。

例如:

int[ ][ ] arr = new int[ h ][ w ];
Arrays.sort( arr ); \\ Sorts int[ ] not ints
Arrays.asList( arr ); \\ Returns List< int[ ] >

相对于整个数组对二维数组进行排序没有多大意义,最好将其存储为一维数组。二进制搜索二维数组也是如此。

如果你想对对象进行排序,有两种方法可以做到。更好的方法是让类实现 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 二维数组 - 排序和搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29734985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com