我正在做一个应用程序,我想在一个字符数组中找到一个特定的字符。换句话说,我有以下char数组:
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数组并通过循环每个char来找到该字符之外,还有其他解决方案吗?
答案 0 :(得分:3)
一种选择是预先sort charArray
并使用Arrays.binarySearch(charArray, myChar)
。非负返回值表示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)
。
答案 1 :(得分:1)
您可以使用哈希/地图来检查角色的存在。根据散列/映射内部结构,此方法具有更好的O(log n)或O(1)时间。
答案 2 :(得分:1)
如果您无法访问Arrays,因为您使用的是JavaME,那么您应该尝试:
您的解决方案是O(n),以及aix所述的解决方案。
您可以尝试使用Map,但这取决于您在阵列中的元素数量。如果您认为阵列中的元素不会超过1000个,请使用O(n)解决方案。但是如果你认为你可能有一个未知数量的元素,那么Map将是一个可靠的选择,提供更好的解决方案。
答案 3 :(得分:1)
您可以使用net.rim.device.api.util.Arrays.getIndex(char[] array, char element)
答案 4 :(得分:0)
这取决于您使用的Java ME configuration / profile。如果你在CDC上,那么检查是否支持Java SE 1.3 Collections框架的哪些部分(只需查找针对您的设备的javadoc并查看java.util
包)。另一件值得检查的事情是你的设备是否有一些黑莓特定的API扩展来处理集合。
如果你只限于最低限度的CLDC / MIDP,那么除了你提到的其他解决方案就是将向Chars添加字符并使用Vector.contains(Object)
答案 5 :(得分:-2)
如果您不想自己实现它,可以在apache commons项目中使用ArrayUtils: