2011-04-06 112 views
0

您好我正在用dictionary.txt文件填充一个哈希映射,我将哈希映射分成多组字长。搜索一个哈希映射

我无法搜索哈希图的模式“a * d ** k”;

任何人都可以帮助我吗?

我需要知道如何搜索Hashmap?

我真的很感激,如果你能帮助我。 谢谢。

+0

你将不得不写产生设置内容为一个字符串的函数 - 在“的toString()”方法将无法做到这一点。 – Pointy 2011-04-06 14:01:20

+0

我使用这种方法从集合中获取单个字符串,但它只给出第一个字符串。'公共静态字符串getSingleString(集S) \t { \t \t \t 而\t { \t \t \t串m = s.iterator()的next()的toString()(s.isEmpty()!)。; \t \t \t return m; \t \t \t \t \t \t \t \t} \t \t返回NULL; \t \t \t}' – 2011-04-06 15:25:51

+0

那么,该函数肯定只会返回第一个字符串。你设置while循环,它获得Set的第一个元素并立即返回它。 – Pointy 2011-04-06 15:28:40

回答

4

A HashMap仅仅是模式搜索的错误数据结构。

你应该考虑这样做的特征模式搜索开箱即用的技术,如Lucene


而且在回答此评论:用它为Android

1m,并其 最快的搜索方式

HashMaps非常快,这是真的,但只有当您按照预期使用它们时才是如此。在你的场景中,散列码并不重要,因为你知道所有的键都是数字的,你可能不会有比30个字母更长的单词。

那么,为什么不直接使用集合的Array或ArrayList来代替HashMap,而是用list.get(string.length()-1)array[string.length()-1]来代替map.get(string.length())。我敢打赌,性能会比使用HashMap更好(但我们无法分辨出这些差别,除非您拥有旧的机器或者条目)。

我并不是说我的设计使用List或Array更好,但是您使用的数据结构仅用于不适用的目的。


严重:如何写作对你的话到平面文件(每行一个词,由词长排序,然后是按字母顺序),只是运行在该文件中的正则表达式查询?如果文件太大,请对文件进行流式处理并搜索各个行,或者将它作为字符串读取,并在IO速度太慢时将其保存在内存中。


或者怎么样只用一个自定义Comparator一个TreeSet

示例代码:

public class PatternSearch{ 

    enum StringComparator implements Comparator<String>{ 
     LENGTH_THEN_ALPHA{ 

      @Override 
      public int compare(final String first, final String second){ 

       // compare lengths 
       int result = 
        Integer.valueOf(first.length()).compareTo(
         Integer.valueOf(second.length())); 
       // and if they are the same, compare contents 
       if(result == 0){ 
        result = first.compareTo(second); 
       } 

       return result; 
      } 
     } 
    } 

    private final SortedSet<String> data = 
     new TreeSet<String>(StringComparator.LENGTH_THEN_ALPHA); 

    public boolean addWord(final String word){ 
     return data.add(word.toLowerCase()); 
    } 

    public Set<String> findByPattern(final String patternString){ 
     final Pattern pattern = 
      Pattern.compile(patternString.toLowerCase().replace('*', '.')); 
     final Set<String> results = new TreeSet<String>(); 
     for(final String word : data.subSet(
      // this should probably be optimized :-) 
      patternString.replaceAll(".", "a"), 
      patternString.replaceAll(".", "z"))){ 
      if(pattern.matcher(word).matches()){ 
       results.add(word); 
      } 
     } 
     return results; 
    } 

} 
+0

我需要在代码中使用哈希映射。 – 2011-04-06 15:22:56

+0

@Steven为什么?这是作业吗? – 2011-04-06 15:53:45

+0

我使用它为Android,它是最快的搜索方式。 – 2011-04-06 19:42:17