哈希表HashMap

  1. HashMap<Integer, String> test = new HashMap<>();
  2. Integer a = 19000000;
  3. Integer b = 19000000;
  4. System.out.println(a == b);
  5. test.put(a, "我是3");
  6. System.out.println(test.containsKey(b));
  7. Zuo z1 = new Zuo(1);
  8. Zuo z2 = new Zuo(1);
  9. HashMap<Zuo, String> test2 = new HashMap<>();
  10. test2.put(z1, "我是z1");
  11. System.out.println(test2.containsKey(z2));
  12. // UnSortedMap
  13. HashMap<Integer, String> map = new HashMap<>();
  14. map.put(1000000, "我是1000000");
  15. map.put(2, "我是2");
  16. map.put(3, "我是3");
  17. map.put(4, "我是4");
  18. map.put(5, "我是5");
  19. map.put(6, "我是6");
  20. map.put(1000000, "我是1000001");
  21. System.out.println(map.containsKey(1));
  22. System.out.println(map.containsKey(10));
  23. System.out.println(map.get(4));
  24. System.out.println(map.get(10));
  25. map.put(4, "他是4");
  26. System.out.println(map.get(4));
  27. map.remove(4);
  28. System.out.println(map.get(4));
  29. // key
  30. HashSet<String> set = new HashSet<>();
  31. set.add("abc");
  32. set.contains("abc");
  33. set.remove("abc");

07. 哈希表 - 图1%0A#card=math&code=%E5%93%88%E5%B8%8C%E8%A1%A8%20%3A%20%E5%A2%9E%E3%80%81%E5%88%A0%E3%80%81%E6%94%B9%E3%80%81%E6%9F%A5%EF%BC%8C%E5%9C%A8%E4%BD%BF%E7%94%A8%E6%97%B6%EF%BC%8C%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6%E4%B8%BA%20O%281%29%0A)

Integer c = 100000;
Integer d = 100000;
System.out.println(c.equals(d));

Integer e = 127; // - 128 ~ 127
Integer f = 127;
System.out.println(e == f);

HashMap<Node, String> map2 = new HashMap<>();
Node node1 = new Node(1);
Node node2 = node1;
map2.put(node1, "我是node1");
map2.put(node2, "我是node1");
System.out.println(map2.size());

引用传递 Integer

值传递 int ( - 128 ~ 127 )

Integer c = 100000;
Integer d = 100000;
System.out.println(c.equals(d));

Integer e = 127; // - 128 ~ 127
Integer f = 127;
System.out.println(e == f);

HashMap<Node, String> map2 = new HashMap<>();
Node node1 = new Node(1);
Node node2 = node1;
map2.put(node1, "我是node1");
map2.put(node2, "我是node1");
System.out.println(map2.size());

但在哈希表中一律按值传递

  1. 哈希表在使用层面上可以理解为—种集合结构
  2. 如果只有key,没有伴随数据value,可以使用HashSet结构
  3. 如果既有key,又有伴随数据value,可以使用HashMap结构
  4. 有无伴随数据,是HashMapHashSet唯一的区别,实际结构是一回事
  5. 使用哈希表增(put)、删(remove)、改(put) 和 查(get)的操作,可以认为时间复杂度为O(1),但是常数时间比较大
  6. 放入哈希表的东西,如果是基础类型,内部按值传递,内存占用是这个东西的大小
  7. 放入哈希表的东西,如果不是基础类型,内部按引用传递,内存占用是8字节

有序表TreeMap

System.out.println("有序表测试开始");
        TreeMap<Integer, String> treeMap = new TreeMap<>();

        treeMap.put(3, "我是3");
        treeMap.put(4, "我是4");
        treeMap.put(8, "我是8");
        treeMap.put(5, "我是5");
        treeMap.put(7, "我是7");
        treeMap.put(1, "我是1");
        treeMap.put(2, "我是2");

        System.out.println(treeMap.containsKey(1));
        System.out.println(treeMap.containsKey(10));

        System.out.println(treeMap.get(4));
        System.out.println(treeMap.get(10));

        treeMap.put(4, "他是4");
        System.out.println(treeMap.get(4));

        // treeMap.remove(4);
        System.out.println(treeMap.get(4));

        System.out.println("新鲜:");

        // TreeMap中最小的key
        System.out.println(treeMap.firstKey());
        // TreeMap中最大的key
        System.out.println(treeMap.lastKey());
        // <= 4
        System.out.println(treeMap.floorKey(4));
        // >= 4
        System.out.println(treeMap.ceilingKey(4));
        // O(logN)

07. 哈希表 - 图2%0A#card=math&code=%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6%E9%83%BD%E6%98%AFO%28logN%29%0A)