所以,听起来可能是一个奇怪的问题,但比较2 String或byte [](使用Arrays.equals())会更快吗?我正在使用Hadoop/Hbase,并且将byte []作为来自Hbase的值,并且我有一个传入的值。将获得的值转换为字符串并进行比较会更快吗?或者将它们与字节数组进行比较?比较字符串或字节数组的速度更快吗?
回答
没有真正的测试它,它似乎Array.equals()是你的朋友。要创建一个字符串,最终在String构造函数中创建一个字节数组的副本,那么您必须对unicode进行解码,这需要为默认的Unicode编码创建解码器,然后将字节数组转换为char数组,然后您必须做等于,这涉及迭代每个字符串中的每个字符。
因此,在O()类型的计算中,您必须读取数组中的每个字节才能转换为字符,所以我认为转换为等于字符串的复杂性更差。
更新: 鉴于添加到问题中的注释,它听起来像是给了一个字符串,并且正在使用它来比较MapReduce作业中的多个结果。在这种情况下,似乎有一个将输入字符串转换为字节并将它们多字节数组比较。这似乎比留下输入字符串并转换作业中返回的每个字节数组更快。
首先,您必须考虑两个字符串是否具有相同的编码。 然后,如果你只是想有一个等于检查,然后继续字节比较。但是如果你想拥有String的行为,那么你可能不得不弄清楚如何知道哪个字符串是大于或小于这个值,在这种情况下,我宁愿先转换为String,然后再比较。
如果它们不是相同的编码,那么它更好地创建字符串,然后进行比较,因为解码部分将由String类自己完成。
是的,在字节[](使用Hbase的Bytes.toByte())中以相同的方式进行编码,并且我不需要compareTo()功能,只需equals()。 – Drizzt321
然后继续进行字节比较。事实上使用Arrays.equals本身 –
首先,你应该问自己是否真的很重要。考虑到你正在处理HBase,从而进行网络通信,无论你做什么都可能会被完全淹没,而且是时间上的。就像@Clint和@Suraj一样,我认为用较少的方法调用可能会更好(即使用Array.equals())。考虑一下当你做一个String equals时会发生什么,然后添加将字节数组转换为Strings的开销。
- 1. 字符串比较比字符串长度更快吗?
- 2. 数字比较比字符串比较更快吗?
- 3. 字符数组的快速比较?
- 4. 在JavaScript中连接字符串或数组的速度更快吗?
- 5. 比较int值或字符串更快吗?
- 6. C#中的字符串性能 - 什么是更快地比较,字符串文字或字符串长度
- 7. 比较ruby字符串或数组
- 8. 快速比较数组数
- 9. 字节数组的比较
- 10. 比较字符串长度
- 11. 检查length = 0的速度比将其与空字符串进行比较更快吗?
- 12. 为什么整数比较比字符串比较快?
- 13. 字符串等于与字节数组比较
- 14. 比较两组字符串
- 15. C#字节数组比较
- 16. c#比较字节数组
- 17. 快速比较字符串与Java中的集合
- 18. 比较字符串数组中的一部分字符串
- 19. 将字符串与数组中的字符串进行比较
- 20. 比较与另一个字符串数组中的字符串
- 21. 为什么Java中的字符串比较(CompareTo)比C#更快?
- 22. 抽象算法:字符串/字节比较/比较
- 23. 比较节点值的字符串
- 24. 比较一个字符串数组PHP
- 25. 比较数组列表与字符串
- 26. 比较字符串数组元素?
- 27. XML字符串/数组比较
- 28. 比较字符串和数组C++
- 29. 比较字符串数组输出Null
- 30. 数组键比较随着串字符
你尝试过和配置/基准吗? –
不,我没有,我在这里问,因为其他人可能已经做了类似的事情,我似乎无法通过谷歌找到它。 – Drizzt321
你需要清理这个问题。该值是在字符串或字节数组中传递的,并且是具有等效字符串或等效字节的点?如果它是以字节形式存储的字符串,则需要进行信息编码,即使它们表示它们都是相同的编码。 – Clint