求一个字符串对应唯一值的算法

007slm 发布于 2013/08/29 14:18
阅读 4K+
收藏 0

假设有不到1000个不重复的字符串,有什么算法可以给这1000个字符串产生个序号 比如 0001号字符串,而且以后有新字符串加入(仍然不超过1000),重新用这个算法生成后,原来已经产生的序号不变。

比如 我现在有字符串 

中国 

美国 

英国

经过算法后

得到标号

0001

0002

0003

以后又加入了 

法国

字符串数组变成

中国

法国 

美国 

英国

经过算法后得到

0001

0004

0002

0003



加载中
0
王正航
王正航
我的程序中大量用到你说的这个需求,用的是文件+map实现的,因为我的网站是挂在一个比较小的租的服务器上的,搞不起数据库。
封装一个工具类,每次启动读取文件内容到map,增加一条记录写入文件,代码也很简洁、效率也非常高。
0
007slm
我也用的是这个方案,文件中存的是字符串的hashcode,这样有一定安全性。
0
徐迎龙
徐迎龙

String a="中国";

a.hashCode();

徐迎龙
徐迎龙
那就先对这1000个汉词进行排序,排序的规则,就字符串的compareTo应该可以的,然后自动对应
中山野鬼
中山野鬼
回复 @宋黎明 : hash的映射函数,不会根据你的数据内容而设计。由此,你的1000个字符串,不代表能一一命中而无冲突。除非算法针对这些字符串的内容,但那也不是hash了。哈。
0
007slm
回复 @中山野鬼 : 我就不超过1000个字符串,4位肯定不冲突,不是要对所有string做hash,问题是现在这个hash算法我写不出来,求代码哈!
中山野鬼
中山野鬼
回复 @宋黎明 : 仍然是hash表。至于是否4位,你需要自己写了。不过这样的散列表,已经不是散列了,查找比较时,冲突的概率挺大,简单说,不是单次比较就ok的。
0
007slm
我只需要4位,因为有不到1000个字符串,其实三位就行 为了好看点 我需要4位,hashcode太长。
0
徐迎龙
徐迎龙
用数据库维护起来多好
0
007slm
.......
0
kenping
kenping

Java String的hasCode()源码

public int hashCode() {
    int hash = hashCode;
    if (hash == 0) {
        if (count == 0) {
            return 0;
        }
        final int end = count + offset;
        final char[] chars = value;
        for (int i = offset; i < end; ++i) {
            hash = 31*hash + chars[i];
        }
        hashCode = hash;
    }
    return hash;
}

0
mingkaidox
mingkaidox

..其实,每次push到array的最后,然后index就是key。。。

开源中国董事会主席
开源中国董事会主席
对,index为数字,位数不足时前面补零
0
softsword
FalconChen
FalconChen
哈哈哈哈哈哈
FalconChen
FalconChen
哈哈
0
winnie_tour
winnie_tour

这不就是数据库sequence的算法吗,自增数不就完了吗,如果不考虑分布式,你自己本地搞个原子的自增操作就可以了,如果考虑分布式,最简单的办法直接用memcache的自增操作,很简单哈

0
方棱
方棱

如果按1行1个词存文件里,那行号就是ID。

如果用逗号隔开存,那逗号的序号就是ID。

我想说的是,只要信息存在,ID本身就是自然存在的,只是你没发现而已。

0
锋行天下2012
锋行天下2012
这用ID主键自增就解决了,加一个字符,id加1,也就是对应的ID号。通过ID号就可以找到字符串。用mysql吧
0
Shazi199
Shazi199
同步Array,push,取index,完成收工!
返回顶部
顶部