content: package com.alibaba.json.test;
  
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.List;
  import java.util.Set;
  
  import junit.framework.TestCase;
  
  import com.alibaba.fastjson.parser.SymbolTable;
  
  public class SymbolTableDupTest extends TestCase {
  
      private HashMap<Integer, Integer>      map          = new HashMap<Integer, Integer>();
      private Set<Integer>                   dupHashCodes = new HashSet<Integer>();
      private HashMap<Integer, List<String>> dupList      = new HashMap<Integer, List<String>>();
  
      private final int                      VALUE        = 114788;
  
      public void test_0() throws Exception {
          int len = 3;
          char[] chars = new char[len];
          tryBit(chars, len);
          tryBit2(chars, len);
          // tryBit3(chars, len);
          // for (Map.Entry<Integer, List<String>> entry : dupList.entrySet()) {
          // System.out.println(entry.getKey() + " : " + entry.getValue());
          // }
  
      }
  
      private void tryBit(char[] chars, int i) {
          char startChar = 'A';
          char endChar = 'z';
  
          for (char j = startChar; j <= endChar; j++) {
              chars[i - 1] = j;
  
              if (i > 1) {
                  tryBit(chars, i - 1);
              } else {
                  test(chars);
              }
          }
      }
  
      private void tryBit2(char[] chars, int i) {
          char startChar = 'A';
          char endChar = 'z';
  
          for (char j = startChar; j <= endChar; j++) {
              chars[i - 1] = j;
  
              if (i > 1) {
                  tryBit2(chars, i - 1);
              } else {
                  test2(chars);
              }
          }
      }
  
      private void tryBit3(char[] chars, int i) {
          char startChar = 'A';
          char endChar = 'z';
  
          for (char j = startChar; j <= endChar; j++) {
              chars[i - 1] = j;
  
              if (i > 1) {
                  tryBit3(chars, i - 1);
              } else {
                  test3(chars);
              }
          }
      }
  
      private void test3(char[] chars) {
          int hash = SymbolTable.hash(chars, 0, chars.length);
          if (hash == VALUE) {
              System.out.println(new String(chars));
          }
      }
  
      private void test2(char[] chars) {
          int hash = SymbolTable.hash(chars, 0, chars.length);
          if (dupHashCodes.contains(hash)) {
              List<String> list = dupList.get(hash);
              if (list == null) {
                  list = new ArrayList<String>();
                  dupList.put(hash, list);
              }
              list.add(new String(chars));
          }
      }
  
      private void test(char[] chars) {
          int hash = SymbolTable.hash(chars, 0, chars.length);
          Integer count = map.get(hash);
          if (count != null) {
              dupHashCodes.add(hash);
              map.put(hash, count.intValue() + 1);
          } else {
              map.put(hash, 1);
          }
      }
  
  }
  