package B;
import javax.swing.plaf.basic.BasicScrollPaneUI;
import java.util.TreeMap;
/**
* @author 真他喵的学不动咯
* @create 2022-08-09--21:27
*/
public class HashMap{ //哈希表
//(K,V)
public static void main(String[] args){ //哈希表的增删改查都是常数时间复杂度,但是这个常数很大
//测试1
HashMap<String,String> map=new HashMap<>(); //此处的值是按照字面记录的,只要所查的内容有就返回true,相当于存在常量池中
//和别的地方把String是引用数据类型是不一样的,HashMap中是把String看成基本数据类型
map.put("123","LSC");
map.containKey("123"); //查有没有“123”这个key,返回true/false
map.get("123"); //取出key="123"对应的value值
map.put("123","yyy"); //把key="123"对应的value值改成"yyy"
map.remove("123"); //删除key="123"对应的value值
//测试2
HashMap<Integer,String> map2=new HashMap<>();
map2.put(123456789,"我是123456789");
Integer a=123456789;
Integer b=123456789;
System.out.println(a==b); //false,用==比较的是两个数的地址,a和b的地址不同,此时比较的是地址
System.out.println(a.equals(b)); //true,用equals比较的是两个数的内容,a和b内容均为123456789,此时比较的是字面量
System.out.println(map2.containsKey(a)); //ture,map2中有key为a的内容,此时比较的是字面量
System.out.println(map2.containsKey(b)); //ture,map2中有kbey为b的内容,此时比较的是字面量
//总结:Integer\Double\String等,都是按值传递,而不是引用数据类型
Node node1=new Node(1);
Node node2=new Node(1);
HashMap<Node,String> map3=new HashMap<>();
map3.put(node1,"进入"); //HashMap只管Node内存,但是不管Node中存了多少,这是Node的事情
System.out.println(map3.containKey(node1)); //map3中是否包含key为node1的东西
System.out.println(map3.containKey(node2));
//有序表 TreeMap 每次都是 logN 级别
TreeMap<Integer,String> treeMap1=new TreeMap<>(); //new一个TreeMap
treeMap1.put(3,"我是3");
treeMap1.put(0,"我是3");
treeMap1.put(4,"我是3");
System.out.println(treeMap1.containsKey(3)); //查询是否map中包含key=3
System.out.println(treeMap1.containsKey(6));
System.out.println(treeMap1.get(3)); //得到key=3的值
treeMap1.put(3,"管他谁是3"); //改
treeMap1.remove(3); //删
treeMap1.firstKey(); //所有key中最小的key
treeMap1.lastKey(); //所有key中最大的key
treeMap1.floorKey(5); //把 <=5 ,离5最近的key返回;如果加入过5,直接返回5
treeMap1.ceilingEntry(5); //把 >=5 ,离5最近的key返回;如果加入过5,直接返回5
Node node3=new Node(3);
Node node4=new Node(3);
TreeMap<Node,String> treeMap2=new TreeMap<>(); //new一个TreeMap
treeMap2.put(node3,"这是Node3");
treeMap2.put(node4,"这是Node4"); //会报错,因为TreeMap不知道怎么把Node的Key进行比较,解决方式是在Node中写明比较方法
//因为TreeMap是有序表,所以必须Key是必须能明确比较的
}
//内部类
public static Class Node{
public int value;
public Node(int v){
value=v;
}
}
}
//HashMap+TreeMap
最新推荐文章于 2024-05-31 10:46:10 发布