Day11_49_HashTable
2024-08-30 23:10:08
HashTable
* HashTable是较早期的使用Hash算法的一种容器结构,现在基本已被淘汰,单线程多使用HashMap,多线程使用ConcurrentHashMap。
* HashTable继承体系
- HashTable<K,V>也是一种key-value结构,它继承自Dictionary<K,V>,实现了Map<K,V>和Cloneable以及Serializable接口。
- HashTable的操作几乎和HashMap一致,主要的区别在于HashTable为了实现多线程安全,在几乎所有的方法上都加上了synchronized锁,而加锁的结果就是HashTable操作的效率十分低下。
* HashTable与HashMap对比
(1)线程安全: HashMap是线程不安全的类,多线程下会造成并发冲突,但单线程下运行效率较高;HashTable是线程安全的类,很多方法都是用synchronized修饰,但同时因为加锁导致并发效率低下,单线程环境效率也十分低;
(2)插入null: HashMap允许有一个键为null,允许多个值为null;但HashTable不允许键或值为null;
(3)容量: HashMap底层数组长度必须为2的幂,这样做是为了hash准备,默认为16;而HashTable底层数组长度可以为任意值,这就造成了hash算法散射不均匀,容易造成hash冲突,默认为11;
(4)Hash映射 :HashMap的hash算法通过非常规设计,将底层table长度设计为2的幂,使用位与运算代替取模运算,减少运算消耗;而HashTable的hash算法首先使得hash值小于整型数最大值,再通过取模进行散射运算;
* java.util.Properties
- 是HashTable下的实现类,也是一种key-value结构。
- Xxx.properties 为Java 语言常见的配置文件,如数据库的配置 jdbc.properties, 系统参数配置 system.properties。
- Properties集合中的<key,value>必须都是字符串
- Properties集合也是无序不可重复的和HashMap一样有重复数据存入的话会覆盖旧数据
* Properties 下的常用方法
```
import java.util.Hashtable;
import java.util.Properties;
public class PropertiesTest01 {
public static void main(String[] args) {
//1.创建Properties集合(属性类对象) Properties集合中的<key,value>必须都是字符串,Properties集合也是无序不可重复的和HashMap一样有重复数据存入回覆盖旧数据
Properties properties=new Properties(); //夫类引用指向子类对象
//2.setProperty(String key,String value) 向集合中存入数据
properties.setProperty("18632418755","施歌");
properties.setProperty("13439523164","张三");
properties.setProperty("15631645112","李四");
//3.getProperty(String key) 通过key获取Value
String value=properties.getProperty("18632418755");
System.out.println(value);
}
}
最新文章
- 简单说说.Net中的弱引用
- SpringMVC Controller 介绍
- [poj1742]coin
- 31.DDR2问题3_waring?
- 深入理解asp.net SessionState
- JS一定要放在Body的最底部么? 聊聊浏览器的渲染机制
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf8
- openerp 报表字段 report_rml_content_data
- OpenRisc-48-or1200的SPRS模块分析
- MVC 使用jQuery上传文件
- Android文件上传与下载
- Pycharm快捷键设置(鼠标滚动控制字体大小)
- jQuery的基本选择器
- Mybatis框架二:增删改查
- Flask源码阅读-第四篇(flask\app.py)
- pytorch GPU的程序kill后未释放内存
- Luogu P2577 [ZJOI2005]午餐
- C# winform对话框用法大全
- navicat安装步骤
- 基于VUE的SPA单页应用开发-加载性能篇
热门文章
- 力扣832. 翻转图像-C语言实现-简单题
- Django自学计划之集装箱货物运输物流仓储一站式ERP系统
- ============================================ 新的开始(前后端分离项目学习Vue+DRF)
- 后台用JSONObject接收前端传过来的字符串数组,并转成集合(JSONObject---JSONArray---List)
- deepin 340 USB转console线驱动安装及使用
- WPF -- 一种实现本地化的方法
- 剑指 Offer 55 - II. 平衡二叉树 + 平衡二叉树(AVL)的判断
- const修饰符相关
- js--this指向的相关问题
- String 类的内存 解析