前言
将简单的说一下哈希表是什么,主要形式,主要形式的区别,和主要的操作。以及注意事项一、哈希表是什么?
哈希表在使用层面上可以理解为一种集合结构 也就是将一堆东西放到一起组成一个集合。两种情况,一种只有一个值,另一个是有伴随数据的表。Java中是HashSet和HashMap二、包括什么
1.HashSet
先给出key值为基础类型的代码//哈希表的定义
HashSet<Integer> hashSet1 = new HashSet<>();
//哈希表的增加操作
hashSet1.add(3);
//看一下哈希表中是否含有该值
System.out.println(hashSet1.contains(3));
//哈希表的删操作
hashSet1.remove(3);
System.out.println(hashSet1.contains(3));
key值为自定义结构的代码
//定义自己的结构
public static class Node{
public int value;
public Node next;
public Node(int val) {
value = val;
}
}
nodeA = new Node(1);
nodeB = new Node(1);
//定义
HashSet<Node> hashSet2 = new HashSet<>();
//增加
hashSet2.add(nodeA);
//看是不是在里面
System.out.println(hashSet2.contains(nodeA));
System.out.println(hashSet2.contains(nodeB));
//删
hashSet2.remove(nodeA);
System.out.println(hashSet2.contains(nodeA));
2.HashMap
先给出key值为基础类型的代码//哈希表的定义
HashMap<String,Integer> hashMap1 = new HashMap<>();
String str1 = "key";
String str2 = "key";
//增加
hashMap1.put(str1, 1);
//看是不是在里面
System.out.println(hashMap1.containsKey(str1));
System.out.println(hashMap1.containsKey(str2));
//得到该Key的伴随数据
System.out.println(hashMap1.get(str1));
System.out.println(hashMap1.get(str2));
hashMap1.put(str2, 2);
System.out.println(hashMap1.containsKey(str1));
System.out.println(hashMap1.containsKey(str2));
System.out.println(hashMap1.get(str1));
System.out.println(hashMap1.get(str2));
//删
hashMap1.remove(str1);
System.out.println(hashMap1.containsKey(str1));
System.out.println(hashMap1.containsKey(str2));
key值为自定义结构的代码
//定义自己的结构
public static class Node{
public int value;
public Node next;
public Node(int val) {
value = val;
}
}
nodeA = new Node(1);
nodeB = new Node(1);
HashMap<Node, String> hashMap2 = new HashMap<>();
hashMap2.put(nodeA, "A节点");
System.out.println(hashMap2.containsKey(nodeA));
System.out.println(hashMap2.containsKey(nodeB));
System.out.println(hashMap2.get(nodeA));
System.out.println(hashMap2.get(nodeB));
hashMap2.put(nodeB, "B节点");
System.out.println(hashMap2.containsKey(nodeA));
System.out.println(hashMap2.containsKey(nodeB));
System.out.println(hashMap2.get(nodeA));
System.out.println(hashMap2.get(nodeB));
注意事项
-
放入哈希表的东西,如果是基础类型,内部按值传递,内存占用就是这个东西的大小
-
放入哈希表的东西,如果不是基础类型,内部按引用传递,内存占用是这个东西内存地 址的大小