目录
哈希表
从时间复杂度的角度来看,哈希表的优势之处在于无论表中有多少条数据,其增删改查所耗费的时间复杂度是O(1)常数级别。
注:这里的常数时间是一个较大的时间,即比常规的加减法等操作时间大。
哈希表的增、查操作
//创建一个哈希表 (K V)
HashMap<String,String> map = new HashMap<>();
//map.put(),增加/修改数据
map.put("super","爱坤");
//map.containsKey() 判断map中是否存在K == "super",存在则返回true
System.out.println(map.containsKey("super"));
//map.containsValue() 判断map中是否存在V == "爱坤",存在则返回true
System.out.println(map.containsValue("爱坤"));
//map.get() 得到map中 K值 所对应的 V值
System.out.println(map.get("super"));
输出结果如下:
true
true
爱坤
值得注意的是:对于哈希表的查操作,所查询的并非是某个变量的内存地址,这里将直接查找变量的内容。举个例子:
map.put("super","爱坤");
String a = "super";
String b = "super";
System.out.println(map.get(a));
System.out.println(map.get(b));
System.out.println(map.containsKey(a));
System.out.println(map.containsKey(b));
//返回结果
爱坤
爱坤
true
true
尽管a和b的内存地址不同,但返回的结果依旧相同。
注:这里尽针对于原生类;若为自定义类,则需另作说明。
对哈希表的修改、删除操作
map.put("super","爱坤");
System.out.println(map.get("super"));
//修改K==“super”所对应的value值
map.put("super","小黑子");
System.out.println(map.get("super"));
//删除“super”及其value值,返回null
map.remove("super");
System.out.println(map.get("super"));
输出结果如下:
爱坤
小黑子
null
有序表
基本操作与哈希表类似;有序表的一个最大的优点是:可以对key的值进行排序。(这里讲述的是原生类的排序)
从算法时间性能的角度上看:有序表的每一次增删改查操作是O(logn)级别的。
有序表的增删改查操作
TreeMap<Integer, String> trMap = new TreeMap<>();
//增添数据
TreeMap<Integer, String> trMap = new TreeMap<>();
trMap.put(5,"我是5");
trMap.put(2,"我是2");
trMap.put(7,"我是7");
trMap.put(0,"我是0");
trMap.put(3,"我是3");
//查询数据
System.out.println("查表中是否有5:"+trMap.containsKey(5));
System.out.println("查表中是否有6:"+trMap.containsKey(6));
System.out.println("5所对应的value值是:"+trMap.get(5));
System.out.println("-----------------");
//修改数据
trMap.put(5,"他是5");
System.out.println("修改后5所对应的value值是:"+trMap.get(5));
//删除数据
trMap.remove(5);
System.out.println("删除后5所对应的value值是:"+trMap.get(5));
输出结果:
查表中是否有5:true
查表中是否有6:false
5所对应的value值是:我是5
-----------------
修改后5所对应的value值是:他是5
删除后5所对应的value值是:null
有序表排序功能的简单操作
TreeMap<Integer, String> trMap = new TreeMap<>();
trMap.put(5,"我是5");
trMap.put(2,"我是2");
trMap.put(7,"我是7");
trMap.put(0,"我是0");
trMap.put(3,"我是3");
System.out.println("输出表中第一个key:"+trMap.firstKey());
System.out.println("输出表中最后一个key:"+trMap.lastKey());
System.out.println("输出表中<=5离5最近的key:"+trMap.floorKey(5));
System.out.println("输出表中>=6离6最近的key:"+trMap.ceilingKey(6));
输出结果:
输出表中第一个key:0
输出表中最后一个key:7
输出表中<=5离5最近的key:5
输出表中>=6离6最近的key:7
舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。