在字符数组中找到一个特定的字符
我正在做一个应用程序,我想在字符数组中找到一个特定的字符。换句话说,我有以下的字符数组:在字符数组中找到一个特定的字符
char[] charArray= new char[] {'\uE001', '\uE002', '\uE003', '\uE004', '\uE005', '\uE006', '\uE007', '\uE008', '\uE009'};
在某一点上,我要检查,如果字符'\uE002'
在charArray
存在。我的方法是对charArray
中的每个字符进行循环,并查找它是否存在。
for (int z = 0 ; z < charArray; z ++) {
if (charArray[z] == myChar) {
//Do the work
}
}
是否有任何其他的解决方案,而不是通过循环每个字符的char数组和查找字符?
一个选项是预sortcharArray
并使用Arrays.binarySearch(charArray, myChar)
。非负的返回值将表示存在于charArray
中。
char[] charArray = new char[] {'\uE001', '\uE002', '\uE003', '\uE004', '\uE005', '\uE006', '\uE007', '\uE008', '\uE009'};
Arrays.sort(charArray); // can be omitted if you know that the values are already sorted
...
if (Arrays.binarySearch(charArray, myChar) >= 0) {
// Do the work
}
编辑避免使用Arrays
模块另一种方法是把字符转换成字符串(在初始化时),然后使用String.indexOf():
String chars = "\uE001...";
...
if (chars.indexOf(myChar) >= 0) {
// Do the work
}
这不是巨大的差别是什么你已经在做,除了它需要更少的代码。
如果n
的尺寸为charArray
,则第一个解决方案为O(log n)
,而第二个解决方案为O(n)
。
您可以使用散列/映射来检查字符的存在。根据散列/映射内部结构,此方法具有更好的O(log n)或O(1)时间。
如果您没有访问阵列,因为你是在工作的JavaME,那么你应该尝试:
- 或实现有序数组和二进制搜索youself
- 或者只是使用一个O(n)的解决方案,是至极反正一个很好的解决方案。
您的解决方案是O(n)以及aix所述的解决方案。
您可以尝试使用Map,但这取决于您在阵列中有多少元素。如果您认为阵列中不会超过1000个元素,只需使用O(n)解决方案。但是如果你认为你可以有一个未知的元素数量,一个地图将是一个可供选择的选择,提供更好的解决方案。
O(n)是什么意思 –
O(n)是一种解决方案,它提供最多n步内的答案,其中n是您拥有的对象的数量。在这种情况下,n将是数组的大小。例如,如果你的数组有570个元素,这里的答案会在你的算法的最多570次迭代中出现。 O(n)解决方案通常很好,但是如果你有一个大的N(1k +),你可以尝试改进它。但这一切都取决于您的业务。如果您要搜索很多,但不会包含太多内容,则在O(log n)的排序数组中进行二进制搜索将是完美的。否则,请考虑使用地图。 – SHiRKiT
或者如果你真的想研究这一点,你可以实现所有这些解决方案并描述你的应用,看看最好的。但是,当然,对于大N来说Map和二进制搜索在一个Sorted数组中将会是更快的,但是如果你不知道N有多大,有时候浪费那么多时间去查看一些东西是不值得的。在这种情况下,我会坚持地图。 – SHiRKiT
这取决于您使用的是什么Java ME configuration/profile。如果您使用的是CDC,请检查是否支持Java SE 1.3 Collections框架的哪些部分(只需找到适用于您设备的javadoc并查看java.util
包)。值得检查的另一件事是你的设备是否有一些黑莓专用的API扩展来处理集合。
如果仅限于裸CLDC/MIDP的最小那么比你提到的将字符添加到载体和使用Vector.contains(Object)
您可以使用net.rim.device.api.util.Arrays.getIndex(char[] array, char element)
只有哈希能做到这一点更快其他的解决办法。但是,如果你的char数组不大于10000字符,这个逐字符检查应该做得相当快。 – Cipi
无论是字符还是数组都不变,简单来说就是永远不会改变?甚至不经常改变? –
您的优先事项是什么?你在寻找更快,还是更简单,还是......? –