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); } } }