예제 #1
0
  public void run() {
    // each file is processed into a local hash table and then merged with the global results
    // this will cause much less contention on the global table, but still avoids a sequential
    // update
    Hashtable<String, Integer> local_results =
        new Hashtable<String, Integer>(WordCountJ.HASH_SIZE, WordCountJ.LF);
    // grab a file to work on
    String cf;
    while ((cf = files.poll()) != null) {
      try {
        BufferedReader input = new BufferedReader(new FileReader(cf));
        String text;
        // well go line-by-line... maybe this is not the fastest
        while ((text = input.readLine()) != null) {
          // parse words
          Matcher matcher = pattern.matcher(text);
          while (matcher.find()) {
            String word = matcher.group(1);
            if (local_results.containsKey(word)) {
              local_results.put(word, 1 + local_results.get(word));
            } else {
              local_results.put(word, 1);
            }
          }
        }
        input.close();
      } catch (Exception e) {
        System.out.println(" caught a " + e.getClass() + "\n with message: " + e.getMessage());
        return;
      }
      // merge local hashmap with shared one,could have a
      // seperate thread do this but that might be cheating

      Iterator<Map.Entry<String, Integer>> updates = local_results.entrySet().iterator();
      while (updates.hasNext()) {
        Map.Entry<String, Integer> kv = updates.next();
        String k = kv.getKey();
        Integer v = kv.getValue();
        synchronized (results) {
          if (results.containsKey(k)) {
            results.put(k, v + results.get(k));
          } else {
            results.put(k, v);
          }
        }
      }
      local_results.clear();
    }
  }
예제 #2
0
  public String getLegend(String[] cityMap, int[] POIs) {
    char[] ans = new char[POIs.length];

    Hashtable hash = new Hashtable();

    for (int i = 0; i < cityMap.length; i++) {
      for (int j = 0; j < cityMap[i].length(); j++) {
        char cur = cityMap[i].charAt(j);
        int k = 1;
        if (!hash.containsKey(cur)) {
          hash.put(cur, k);
        } else {
          int prev = (int) hash.get(cur);
          hash.remove(cur);
          hash.put(cur, prev + 1);
        }
      }
    }

    Enumeration vals = hash.keys();
    while (vals.hasMoreElements()) {
      char c = (char) vals.nextElement();

      for (int i = 0; i < POIs.length; i++) {
        if (hash.get(c) == POIs[i]) {
          ans[i] = c;
        }
      }
    }

    String str = new String(ans);

    return str;
  }