【问题标题】:how to find duplicate and unique string entries using Hashtable如何使用 Hashtable 查找重复和唯一的字符串条目
【发布时间】:2011-08-31 15:18:42
【问题描述】:

假设我正在从命令行输入一个字符串,并且我想使用 Hashtable 在字符串中查找重复且唯一的条目。

例如:

我/p:

你好你好再见你好你好名字你好你好

o/p:

独特的元素是:再见、好、名字、日子

重复的元素是:

嗨 3 次

你好两次

【问题讨论】:

    标签: java collections hashtable


    【解决方案1】:

    您可以通过在输入字符串上调用split(" ") 来拆分输入。这将返回代表每个单词的 String[]。遍历这个数组,并使用每个字符串作为 Hashtable 的键,值是一个整数。每次遇到一个单词时,要么增加它的值,要么如果当前没有值,则将值设置为 0。

    Hashtable<String, Integer> hashtable = new Hashtable<String, Integer>();
    String[] splitInput = input.split(" ");
    for(String inputToken : splitInput) {
        Integer val = hashtable.get(inputToken);
        if(val == null) {
            val = new Integer(0);
        }
        ++val;
        hashtable.put(inputToken, val);
    }
    

    另外,您可能想要查看HashMap 而不是HashtableHashMap 不是线程安全的,但速度更快。 Hashtable 有点慢,但是是线程安全的。如果您尝试在单个线程中执行此操作,我建议您使用HashMap

    【讨论】:

    • 保持计数的 Map 构造在 Apache Commons Collections API 中也称为“Bag”。 commons.apache.org/collections/apidocs/org/apache/commons/… Guava 称其为“MultiSet”guava-libraries.googlecode.com/svn/tags/release09/javadoc/com/…
    • 碰撞怎么办?说“hi”和“bye”哈希值相同,然后呢?
    • @Yasser A Hashtable 不使用散列值作为键,它使用散列值来选择包含正确键的存储桶。因此,两个String 将在同一个“桶”中找到哈希到相同值的两个String,但要完成查找,您必须将密钥与桶中的所有值进行比较(可能)以找到您的钥匙。这有意义吗?
    【解决方案2】:

    使用以字符串为键、以数字类型为计数器的哈希表。

    遍历所有单词,如果它们不在地图中,则插入它们;否则增加计数(哈希表的数据部分)。

    马里奥

    【讨论】:

      【解决方案3】:

      您可以将每个字符串转换为整数。然后,使用生成的整数作为哈希值。要将string转换为int,可以将其视为base 256数字,然后进行转换

      【讨论】:

        猜你喜欢
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 2016-02-08
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        • 2019-11-14
        • 1970-01-01
        相关资源
        最近更新 更多