我正在寻找一种创建任意字母数字字符串的int\long表示的方法。哈希码不适用,因为我不能承受哈希冲突,即表示必须是唯一且可重复的。
数值表示将用于执行高效(希望如此)的比较。创建数值键将需要一些时间,但它只需要发生一次,而我需要使用它执行大量的比较 - 这将希望比比较原始字符串要快得多。
欢迎提供任何其他更快的字符串比较想法...
我正在寻找一种创建任意字母数字字符串的int\long表示的方法。哈希码不适用,因为我不能承受哈希冲突,即表示必须是唯一且可重复的。
数值表示将用于执行高效(希望如此)的比较。创建数值键将需要一些时间,但它只需要发生一次,而我需要使用它执行大量的比较 - 这将希望比比较原始字符串要快得多。
欢迎提供任何其他更快的字符串比较想法...
如果你的字符串长度没有限制,你就无法避免碰撞。
一个整数有4294967296种可能的值(2 ^ 32)。如果你有一个超过4个ASCII字符或两个Unicode字符以上的字符串,那么可能的字符串值就比可能的整数值多。每个可能的5个字符字符串都不能拥有一个唯一的整数值。长值具有更多的可能值,但它们只能为每个可能的8个ASCII字符的字符串提供一个唯一的值。
哈希码在两步处理中非常有用:首先检查哈希码是否匹配,然后再检查整个字符串。对于大多数不匹配的字符串,你只需要进行第一步操作,速度非常快。
您是否可以先使用哈希码,如果哈希码匹配,则进行逐个字符比较?
String y = "oiu291981u39u192u3198u389u28u389u";
BigInteger bi = new BigInteger(y, 36);
System.out.println(bi);
开始时有几个问题:
据我所知,在Java中String是一个对象,两个相同的字符串指向同一个对象。
因此,可能只需比较对象(可能已经以这种方式实现了字符串比较)。
如果这不起作用,您可以尝试使用Pascal实现的字符串对象,其中第一个元素是长度,如果您的字符串具有不同的长度,则应该可以节省一些CPU时间。
你的字符串有多长?任意长的字符串无法压缩成32/64位格式。