【问题标题】:How to Create a Unique Integer from String in java? [closed]如何在java中从字符串创建一个唯一的整数? [关闭]
【发布时间】:2017-03-21 15:02:07
【问题描述】:

我需要从 Java 中的字符串创建一个唯一整数,这样碰撞的机会就会大大减少。

有什么办法,我们可以在 Java 中创建一个整数,它对于同一个字符串总是唯一的?

我必须将缺少的字符串存储在数据库中,所以我想转换为哈希码以减少我触发 SELECT 查询的检索时间。..

【问题讨论】:

  • 那么,你需要将一个字符串作为输入,并产生一个唯一的整数吗?你的意思是像hashcode
  • 我必须将缺少的字符串存储在数据库中,所以我想转换成哈希码以减少检索时间
  • 如果您需要更快的 SELECT 查询,只需在您正在搜索的列上放置一个索引。数据库将为您处理所有哈希。
  • 所以不需要散列只索引就可以了?

标签: java database string


【解决方案1】:

“永远独一无二”?没有。

您所说的基本上是散列,除非您的字符串没有比整数更多的信息内容(即位),否则您不能保证唯一性。

您可以期望的最好的结果是一些合理平衡的负载因子,并且网络上有许多通用散列函数可用。

Java 的 Object 类实际上提供了一个 .hashCode() 方法,如果大多数子类想要不同的行为,可以覆盖该方法。

事实上,Java's String class does exactly that

所以你可以简单地做这样的事情:

String str = "My hovercraft is full of eels";
int code = str.hashCode();

【讨论】:

  • “兄弟姐妹”和“德黑兰”具有相同的哈希码。
  • 当然。减少可用位数时总是会发生冲突。
  • @xenteros:是的,请参阅我的第二和第三段 :-) 即使字符集仅限于 alpha(52 个大写/小写字母),每个字符也只需要 6 位。那是大约 48 位的信息,而且由于 Java int 只有 32 位,所以肯定会发生冲突。在任何情况下,单个 Java 字符仅限于 alpha,每个都需要 16 位。鉴于该信息似乎来自stackoverflow.com/questions/9406775/…,您应该提到它们是 58,000 个单词中仅有的两次冲突。
【解决方案2】:

看这个例子

import java.io.*;
public class Test {

   public static void main(String args[]) {
      String Str = new String("Welcome to Tutorialspoint.com");
      System.out.println("Hashcode for Str :" + Str.hashCode() );
   }
}

如果 srring 相同,那么它将产生相同的哈希码 Reference

你也可以看看 How to generate a unique hash code for string input in android...?

【讨论】:

    【解决方案3】:

    循环字符串并从字符串中获取一个字符并获取每个章程的 ascii 并组合 ascii 。它将给出唯一的整数。下面是如何从字符中获取 ascii 的代码。

    String name = "admin";
    char character = name.charAt(0); // This gives the character 'a'
    int ascii = (int) character; // ascii is now 97.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      • 2020-05-26
      • 1970-01-01
      • 2019-08-11
      相关资源
      最近更新 更多