Java集合08

15.HashTable

15.1HashTable的基本介绍

  1. 存放的元素是键值对:即K-V
  2. HashTable的键和值都不能为null
  3. HashTable的使用方法基本上和HashMap一样
  4. HashTable是线程安全的(synchronized),HashMap是线程不安全的
  5. HashTable是无序的

例子:

Hashtable的底层

  1. 底层有数组 HashTable$Entry [ ] 的初始化大小为 11

  2. 临界值 threshold 8=11*0.75

  3. 扩容:原来容量*2+1

package li.map.hashtable;

import java.util.Hashtable;

@SuppressWarnings("all")
public class HashTableExercise {
public static void main(String[] args) {
Hashtable table = new Hashtable();
table.put("john",100);//ok
//table.put(null,100);//异常
//table.put("john",null);//异常
table.put("likk",100);//ok
table.put("likk",99);//替换
System.out.println(table);//{likk=99, john=100} 无序
}
}

如下图:初始容量为11,临界值为8


如下图:当数组容量使用到8时,要添加下一个元素时,数组会先扩容到23,临界值变为17

15.2HashTable扩容

简单说一下HashTable的底层

  1. 底层有数组 HashTable$Entry[ ] 初始化大小为 11

  2. 临界值 threadhold 8 = 11 * 0.75

  3. 扩容:

    3.1 执行方法 addEntry(hash, key, value, index) 添加K-V对封装到Entry

    3.2 当if (count >= threshold) 满足时 ,就进行扩容

    3.3 按照int newCapacity = (oldCapacity << 1) + 1;的大小进行扩容


HashTable和HashMap的对比

版本 线程安全(同步) 效率 允许null键null值
HashMap 1.2 不安全 可以
HashTable 1.0 安全 较低 不可以

16.Properties

16.1Properties基本介绍

  1. Properties类继承自HashTable类,并实现了Map接口,也是使用键值对的形式来保存数据

  2. Properties使用特点和HashTable类似

  3. Properties还可以用于 从xxx.properties文件中,加载数据到Properties类对象并进行读取和修改

  4. 说明:在工作后xxx.properties文件通常作为配置文件,这个知识点在IO举例。

    Java 读写Properties配置文件 - 旭东的博客 - 博客园 (cnblogs.com)

16.2基本使用

例子:

package li.map.properties;

import java.util.Properties;
@SuppressWarnings("all")
public class Properties_ {
public static void main(String[] args) {
Properties properties = new Properties(); // 因为 Properties 继承了 HashTable,因此 Key\Value 都不能为空
// 1.增加
// properties.put(null,100);//抛出空指针异常
// properties.put("join",null);//抛出空指针异常
properties.put("join",100);//k-v
properties.put("jack",100);
properties.put("lili",80);
properties.put("lili",123);//如果有相同的key,则value被替换
System.out.println(properties);//{jack=100, lili=123, join=100} 同样是无序的 // 2.删除
properties.remove("jack");
System.out.println(properties);//{lili=123, join=100} // 3.查找:通过 key 获取对应的value
System.out.println(properties.get("lili"));//123 // 4.修改(就是直接覆盖原来的值)
properties.put("join",999);
System.out.println(properties);//{lili=123, join=999} }
}

17.集合选型规则(开发中如何选择集合实现类)(记住)

在开发中,选择什么集合实现类,主要取决于业务操作特点,然后根据集合实现类特性进行选择,分析如下:

  1. 先判断存储数据的类型[一组对象[单列]或者一组键值对[双列]]

  2. 一组对象[单列]:Collection接口

    ​ 允许重复:List

    ​ 增删多:LinkedList [底层维护了一个双向链表]

    ​ 改查多:ArrayList [底层维护了Object类型的可变数组]

    ​ 不允许重复:Set

    ​ 无序:HashSet [底层是HshMap,维护了一个哈希表,即:数组+链表+红黑树]

    ​ 有序:TreeSet

    ​ 插入顺序和取出顺序一致:LinkedHashSet [底层是LinkedHashMap 数组+双向链表]

  3. 一组键值对[双列]:Map

    ​ 键无序:HashMap [底层是:哈希表-->jdk7:数组+链表 jdk8:数组+链表+红黑树]

    ​ 键排序:TreeMap

    ​ 键插入和取出顺序一致:LinkedHashMap

    ​ 读取文件:Properties

day25--Java集合08的更多相关文章

  1. Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)

    概要 前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack). Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 Ja ...

  2. Java 集合系列 08 Map架构

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  3. 【转】Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)

    概要 前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack). Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 Ja ...

  4. Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)

    概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例 ...

  5. Java 集合系列目录(Category)

    下面是最近总结的Java集合(JDK1.6.0_45)相关文章的目录. 01. Java 集合系列01之 总体框架 02. Java 集合系列02之 Collection架构 03. Java 集合系 ...

  6. Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例

    概要  前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...

  7. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  8. Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. Java 集合系列 17 TreeSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

随机推荐

  1. 漏洞修复之Oracle系列

    Oracle 11g CVE-2012-1675(远程投毒)漏洞修复. 数据库版本 Oracle 11g 11.2.0.4.0非RAC 漏洞编号 CVE-2012-1675 漏洞介绍 Oracle允许 ...

  2. QQ空间未授权评论_已忽略

    看群友们聊天时发现的, 大概是做了查看了动态访问时间的一个设置, 但是仅自己可见的说说还是被评论了的这么一个问题. 闲的没事就翻了一下找一下问题. 这个方法嘎嘎鸡肋, 可以说完全没用, 交到tsrc, ...

  3. 数字化转型之数字资产知识库(springboot+es+vue+neo4j)

    前言 在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编,企业知识共享库等.针对这些文档性的东西,手工纸质化去管理是非常消耗工作量的,并且纸质化查阅难,易损耗,所以电 ...

  4. php 图片转换二进制数

    $image = "1.jpg"; //图片地址 $fp = fopen($image, 'rb'); $content = fread($fp, filesize($image) ...

  5. php公立转农历

    <?php function nongli($riqi) { //优化修改 20160807 FXL $nian=date('Y',strtotime($riqi)); $yue=date('m ...

  6. 2.2.1 用户态、内核态的形成 -《zobolの操作系统学习札记》

    内核态的出现,让计算机系统的权力向操作系统高度集中了. 操作系统分出内核态和用户态,就是为了进行不同等级的权限管理, 从而更好的适应多用户多任务并发的工作环境. 用户态和内核态的来源 在早期的单进程单 ...

  7. 最小生成树 链式前向星 Prim&Kruskal

    Prim: Prim的思想是将任意节点作为根,再找出与之相邻的所有边(用一遍循环即可),再将新节点更新并以此节点作为根继续搜,维护一个数组:dis,作用为已用点到未用点的最短距离. 证明:Prim算法 ...

  8. 实战模拟│单点登录 SSO 的实现

    目录 什么是单点登录 单点登录的凭证 父域 Cookie 方式 用户认证中心方式 localstorage方式 什么是单点登录 单点登录: SSO(Single Sign On) 用户只需登录一次,就 ...

  9. Python: 列表、数组及迭代器切片的区别及联系

    1. 对列表和数组进行切片 1.1 切片索引 众所周知,Python中的列表和numpy数组都支持用begin: end语法来表示[begin, end)区间的的切片索引: import numpy ...

  10. 4 zookeeper集群和基本命令

    4 zookeeper集群和基本命令 集群思路:先搞定一台服务器,再克隆出两台,形成集群! 1 安装zookeeper 我们的zookeeper是安装在/opt目录下 2 配置服务器编号 在/opt/ ...