ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

day25--Java集合08

2022-08-24 20:31:06  阅读:209  来源: 互联网

标签:day25 08 properties -- HashTable put table 100 Properties


Java集合08

15.HashTable

15.1HashTable的基本介绍

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

例子:

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

image-20220824161131677 image-20220824161604311

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

image-20220824162643803

image-20220824162812170

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;的大小进行扩容

image-20220824165253845


image-20220824165542298

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}

    }
}
image-20220824175228324

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

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

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

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

    ​ 允许重复:List

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

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

    ​ 不允许重复:Set

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

    ​ 有序:TreeSet

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

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

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

    ​ 键排序:TreeMap

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

    ​ 读取文件:Properties

标签:day25,08,properties,--,HashTable,put,table,100,Properties
来源: https://www.cnblogs.com/liyuelian/p/16621444.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有