package class03;
import java.util.HashMap;
import java.util.TreeMap;
public class Code05_HashMapTreeMap {
public static class Node {
public int value;
public Node(int v) {
value = v;
}
}
// (K V)表
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("zuochengyun", "我是左程云");
System.out.println(map.containsKey("zuochengyun"));
System.out.println(map.containsKey("zuo"));
System.out.println(map.get("zuochengyun"));
map.put("zuochengyun", "他是左程云");
System.out.println(map.get("zuochengyun"));
// map.remove("zuochengyun");
// System.out.println(map.containsKey("zuochengyun"));
// System.out.println(map.get("zuochengyun"));
String test1 = "zuochengyun";
String test2 = "zuochengyun";
System.out.println(map.containsKey(test1));
System.out.println(map.containsKey(test2));
HashMap<Integer, String> map2 = new HashMap<>();
map2.put(1234567, "我是1234567");
Integer a = 1234567;
Integer b = 1234567;
System.out.println(a == b);
System.out.println(map2.containsKey(a));
System.out.println(map2.containsKey(b));
Node node1 = new Node(1);
Node node2 = new Node(1);
HashMap<Node, String> map3 = new HashMap<>();
map3.put(node1, "我进来了!");
System.out.println(map3.containsKey(node1));
System.out.println(map3.containsKey(node2));
System.out.println("===================");
TreeMap<Integer, String> treeMap1 = new TreeMap<>();
treeMap1.put(3, "我是3");
treeMap1.put(0, "我是3");
treeMap1.put(7, "我是3");
treeMap1.put(2, "我是3");
treeMap1.put(5, "我是3");
treeMap1.put(9, "我是3");
System.out.println(treeMap1.containsKey(7));
System.out.println(treeMap1.containsKey(6));
System.out.println(treeMap1.get(3));
treeMap1.put(3, "他是3");
System.out.println(treeMap1.get(3));
treeMap1.remove(3);
System.out.println(treeMap1.get(3));
System.out.println(treeMap1.firstKey());
System.out.println(treeMap1.lastKey());
// <=5 离5最近的key告诉我
System.out.println(treeMap1.floorKey(5));
// <=6 离6最近的key告诉我
System.out.println(treeMap1.floorKey(6));
// >=5 离5最近的key告诉我
System.out.println(treeMap1.ceilingKey(5));
// >=6 离6最近的key告诉我
System.out.println(treeMap1.ceilingKey(6));
// Node node3 = new Node(3);
// Node node4 = new Node(4);
// TreeMap<Node, String> treeMap2 = new TreeMap<>();
// treeMap2.put(node3, "我是node3");
// treeMap2.put(node4, "我是node4");
}
}
java-hashmaptreemap的算法实现和应用
需积分: 0 199 浏览量
更新于2024-02-28
收藏 4KB RAR 举报
在Java编程语言中,`HashMap`和`TreeMap`是两种常见的`Map`接口实现,它们各自具有不同的特性和用途。这两个数据结构都是用来存储键值对的数据结构,但它们的内部实现机制和性能特点有所不同。
HashMap是基于哈希表(也称为散列表)的数据结构实现的。它依赖于键对象的`hashCode()`方法和`equals()`方法来存储和检索元素。当一个键值对被插入HashMap时,键的`hashCode()`方法会被调用,返回的哈希码决定了这个键值对在内部数组中的位置。如果多个键计算出相同的哈希码,那么它们会通过链地址法解决冲突,即在同一个桶中形成链表。HashMap提供了O(1)的平均时间复杂度来执行插入、删除和查找操作,但在最坏的情况下,如果哈希函数分配得不好,可能会退化为O(n)。
而TreeMap则使用了红黑树(一种自平衡二叉查找树)作为其底层实现。这意味着每个键值对都被存储在树的一个节点中,根据键的自然顺序或用户提供的比较器进行排序。插入、删除和查找操作的时间复杂度都是O(log n),因为它们都涉及到对树的遍历。由于TreeMap是有序的,所以它适合需要按特定顺序遍历键或保持插入顺序的应用场景。
HashMap的优势在于其快速的访问速度,特别是当哈希函数设计得足够好时。然而,它不保证元素的顺序,而且对于迭代操作,可能不如TreeMap高效。另一方面,TreeMap虽然在插入和查找上略慢于HashMap,但它提供了一种有序的视图,使得迭代、查找区间以及按特定顺序操作键值对更加方便。
在实际应用中,选择HashMap还是TreeMap取决于具体需求。如果对插入和查找的速度有高要求,并且不需要保持键的排序,HashMap通常是更好的选择。而如果需要按照键的自然顺序或者自定义顺序来遍历元素,或者需要执行范围查询,那么TreeMap更适合。
此外,两者都有其线程安全问题。HashMap不是线程安全的,因此在多线程环境下,需要通过`synchronized`关键字或者使用`ConcurrentHashMap`来保证并发访问的安全性。而`TreeMap`也不是线程安全的,如果在多线程环境下使用,同样需要采取同步措施,或者使用`ConcurrentSkipListMap`作为替代。
HashMap和TreeMap是Java中用于存储键值对的两种重要数据结构,它们各有优势,适用于不同的场景。了解它们的内部工作原理和特性,可以帮助开发者在编程实践中做出更合适的选择。

八月的雨季997
- 粉丝: 926
最新资源
- IMG_5424.PNG
- 电力电子领域三电平逆变器SVPWM与中点电位平衡调制技术及其MATLABSimulink仿真研究
- IMG_5425.PNG
- IMG_5423.PNG
- 基于遗传算法的'多无人机协同任务分配':种群个体代表完整任务分配方案,以代价函数最小化为目标进行优化 实战版
- COMSOL流热拓扑优化:无量纲化处理多目标优化 - 最大换热,最小耗散
- 电机轮循块(200smart ,梯形图,带注释)
- 基于屋面等值线角点延伸的建筑物三维重构.zip
- 两层无人机的协作移动目标围栏控制与相对测量.zip
- 使用三点分离峰进行无人机建筑足迹正则化.zip
- 利用无人机技术在救援行动中.zip
- 无人机 (UAV) 的粒子过滤器实现,试图在 3D 环境中定位放射源。.zip
- 无人机的人类行为模型。.zip
- 无人机的相同目标相同能力.zip
- 无人机的 GPS 拒绝定位与自适应VIO.zip
- 无人机和基于物联网的牛健康监测系统.zip