/src/test/java/com/alibaba/json/test/SymbolTableDupTest.java

https://github.com/alibaba/fastjson · Java · 108 lines · 83 code · 21 blank · 4 comment · 17 complexity · 3bb8eddc2606957cb1589035544c3cb3 MD5 · raw file

  1. package com.alibaba.json.test;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.HashSet;
  5. import java.util.List;
  6. import java.util.Set;
  7. import junit.framework.TestCase;
  8. import com.alibaba.fastjson.parser.SymbolTable;
  9. public class SymbolTableDupTest extends TestCase {
  10. private HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
  11. private Set<Integer> dupHashCodes = new HashSet<Integer>();
  12. private HashMap<Integer, List<String>> dupList = new HashMap<Integer, List<String>>();
  13. private final int VALUE = 114788;
  14. public void test_0() throws Exception {
  15. int len = 3;
  16. char[] chars = new char[len];
  17. tryBit(chars, len);
  18. tryBit2(chars, len);
  19. // tryBit3(chars, len);
  20. // for (Map.Entry<Integer, List<String>> entry : dupList.entrySet()) {
  21. // System.out.println(entry.getKey() + " : " + entry.getValue());
  22. // }
  23. }
  24. private void tryBit(char[] chars, int i) {
  25. char startChar = 'A';
  26. char endChar = 'z';
  27. for (char j = startChar; j <= endChar; j++) {
  28. chars[i - 1] = j;
  29. if (i > 1) {
  30. tryBit(chars, i - 1);
  31. } else {
  32. test(chars);
  33. }
  34. }
  35. }
  36. private void tryBit2(char[] chars, int i) {
  37. char startChar = 'A';
  38. char endChar = 'z';
  39. for (char j = startChar; j <= endChar; j++) {
  40. chars[i - 1] = j;
  41. if (i > 1) {
  42. tryBit2(chars, i - 1);
  43. } else {
  44. test2(chars);
  45. }
  46. }
  47. }
  48. private void tryBit3(char[] chars, int i) {
  49. char startChar = 'A';
  50. char endChar = 'z';
  51. for (char j = startChar; j <= endChar; j++) {
  52. chars[i - 1] = j;
  53. if (i > 1) {
  54. tryBit3(chars, i - 1);
  55. } else {
  56. test3(chars);
  57. }
  58. }
  59. }
  60. private void test3(char[] chars) {
  61. int hash = SymbolTable.hash(chars, 0, chars.length);
  62. if (hash == VALUE) {
  63. System.out.println(new String(chars));
  64. }
  65. }
  66. private void test2(char[] chars) {
  67. int hash = SymbolTable.hash(chars, 0, chars.length);
  68. if (dupHashCodes.contains(hash)) {
  69. List<String> list = dupList.get(hash);
  70. if (list == null) {
  71. list = new ArrayList<String>();
  72. dupList.put(hash, list);
  73. }
  74. list.add(new String(chars));
  75. }
  76. }
  77. private void test(char[] chars) {
  78. int hash = SymbolTable.hash(chars, 0, chars.length);
  79. Integer count = map.get(hash);
  80. if (count != null) {
  81. dupHashCodes.add(hash);
  82. map.put(hash, count.intValue() + 1);
  83. } else {
  84. map.put(hash, 1);
  85. }
  86. }
  87. }