将字符串映射到整数

Kaa*_*rel 10 java

Java中将字符串(Java String)映射到(正)整数(Java int)的最简单方法是什么呢?

  • 等于字符串映射到相等的整数,和
  • 不同的字符串映射到不同的整数?

因此,类似hashCode()但不同的字符串需要产生不同的整数.因此,从某种意义上说,它将是一个没有碰撞可能性的hasCode().

一个明显的解决方案是维护从字符串到整数的映射表,以及一个计数器,以保证为新字符串分配一个新的整数.我只是想知道这个问题通常是如何解决的.将它扩展到除字符串之外的其他对象也很有趣.

mar*_*nus 4

如果没有任何限制,这是不可能实现的,因为可能的字符串比整数多,所以最终你会用完数字。

只有当您限制可用字符串的数量时,才有可能找到解决方案。然后你可以使用一个简单的计数器。这是一个简单的实现,其中可以使用所有(2^32 = 4294967296 个不同的字符串)。不要介意它使用大量内存。

import java.util.HashMap;
import java.util.Map;

public class StringToInt {

    private Map<String, Integer> map;

    private int counter = Integer.MIN_VALUE;

    public StringToInt() {
        map = new HashMap<String, Integer>();
    }

    public int toInt(String s) {
        Integer i = map.get(s);
        if (i == null) {
            map.put(s, counter);
            i = counter;
            ++counter;
        }
        return i;
    }
}
Run Code Online (Sandbox Code Playgroud)