Hashtable和TreeMap

本文详细介绍了Java中的Hashtable、HashMap和TreeMap三种数据结构。Hashtable是线程安全的哈希表,不支持null值且无序;HashMap允许null值,无序且非同步;TreeMap基于红黑树,提供有序的key-value存储,可自定义排序规则。了解它们的特性和使用场景对于优化代码性能至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hashtable
类定义:

public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, 
Cloneable, java.io.Serializable

存储数据:
使用Entry数组,hashmap采用的是Node数组。

private transient Entry<?,?>[] table;

hashtable也是一个散列表,存储内容是key-value映射,通过链地址法实现的哈希表。
hashtable中不允许null值的key和value。
TreeMap
TreeMap用于实现一个key-value的有序集合,是通过红黑树实现的。该Map根据key的自然顺序进行排序【Comparable接口】,同时允许根据创建Map时提供的Comparator比较器进行排序,具体使用取决于所使用的构造器。
常用方法:
put(K key, V value)用于添加一个Entry节点,其中key为指定的value所关联的键,value为指定key对应的值,如果key值已经存在,则将key对应的value修改为新值。
V get(K key)用于获取对应key的value值。

特殊方法:
firstEntry返回TreeMap中最小的key
higherEntry(K key)获取位于key后一位的key-value
lowerEntry(K key)获取位于指定key前一个的key-value

如果key对应的类型定义并没有实现Comparable接口,则需要在定义TreeMap时指定对应的Comparator比较器,否则报出异常。
使用自定义比较器的编程实现:

Map<Integer, String> map = new TreeMap<>(new Comparator<Integer>() { 
	public int compare(Integer o1, Integer o2) { 
	// return o1.compareTo(o2);//调用Integer类中定义的compareTo方法进行比较 
	return o2.compareTo(o1); 
	} 
});

总结:
1、元素特性:Hashtable中的key和value都不允许为null,HashMap中的key和value都可以为null,TreeMap中当key没有实现Comparator接口或者实现Comparable接口但是没有对null情况进行判断处理,则key不允许为null。
2、顺序特性:Hashtable和HashMap具有无序性【不是插入顺序而且随着增删操作顺序会变】,TreeMap采用红黑树实现的,默认按照key的升序排序【自然序】。
3、初始化和扩容:Hashtable默认容积11,不要求容积为2的整数次幂;HashMap默认容量为16,要求容量必须是2的整数次幂;扩容时hashtable时2倍+1,hashmap是2倍;TreeMap没有限制【int】,也没有扩容处理。
4、线程安全:hashtable是同步的,但是在多线程环境下效率表现非常低下,新版本中已经不推荐使用;hashmap没有同步处理,所以扩容时容易出现rehash操作死循环、脏读丢失数据和size不精确的问题。TreeMap线程不安全,有可能出现死循环,可以使用ConcurrentSkipListMap。

内容概要:本文档是详尽的 Android SDK 中文帮助文档,介绍了 Android SDK 的核心概念、组件、开发环境搭建、基础开发流程及常用工具使用指南。首先解释了 Android SDK 的定义及其核心价值,即提供标准化开发环境,使开发者能高效构建、测试、优化 Android 应用。接着详细列出了 SDK 的核心组件,包括 Android Studio、SDK Tools、Platform Tools、Build Tools、Android 平台版本和系统镜像。随后,文档提供了详细的环境搭建步骤,适用于 Windows、macOS 和 Linux 系统,并介绍了基础开发流程,以“Hello World”为例展示了从创建项目到运行应用的全过程。此外,还深入讲解了 ADB、AVD Manager 和 SDK Manager 等核心工具的功能和使用方法。最后,文档涵盖了调试与优化工具(如 Logcat、Profiler 和 Layout Inspector)、关键开发技巧(如多版本 SDK 兼容、Jetpack 库的使用和资源文件管理)以及常见问题的解决方案。 适合人群:具有初步编程知识,希望深入了解 Android 应用开发的开发者,尤其是新手开发者和有一定经验但需要系统化学习 Android SDK 的技术人员。 使用场景及目标:①帮助开发者快速搭建 Android 开发环境;②指导开发者完成基础应用开发,理解核心工具的使用;③提高开发效率,掌握调试与优化技巧;④解决常见开发过程中遇到的问题。 阅读建议:此文档内容全面且实用,建议读者按照章节顺序逐步学习,结合实际开发项目进行练习,尤其要注意动手实践环境搭建和基础开发流程,同时参考提供的扩展学习资源,进一步提升开发技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值