JavaSE教程_进阶
Map集合
按<键,值>对的形式存储元素
put( k, v), containsKey( k ), containsValue( v ) , get( k ), remove( k )
keyset() , values(), entrySet()
底层是哈希表(散列表), 哈希表就是一个数组, 数组的每个元素是一个单向链表
底层是哈希表, 它是线程安全的, HashMap不是线程安全的
初始化容量:11, HashMap初始化容量: 16
加载因子: 0.75, 当<键,值>对的数量大于 哈希桶容量 * 加载因子时, 哈希桶扩容
HashTable默认扩容: 2倍 + 1 , HashMap扩容: 2倍
HashTable的键与值都不能为null, HashMap的键与值可以为null
创建HashTable时, 可以指定初始化容量; HashMap会自动把初始化容量调整为2的幂次方,就是为了快速计算数组的下标
继承了HashTable, 键与值都是String类型
经常用于设置/读取系统属性值
一般情况下, 系统属性会保存在配置文件中, 可以通过Properties读取配置文件的内容, 也可以使用ResouceBundle读取配置文件的属性
实现了SortedMap接口, 可以根据键自然排序, 要求键必须是可比较的
要么指定Comparator比较器, 如果没有Comparator比较器,键需要实现Comparable接口
Comparator比较与Comparable如何选择?
对于TreeMap来说, 先根据Comaparator比较器进行比较大小 , 如果没有Comparator比较器, 再选择Comparable接口。
对于开发人员来说, 一般通过实现Comparable接口定义一个默认的比较规则 , 通过Comparator比较器定义若干不能同的排序规则。
如果不需要根据键排序就选择HashMap, 如果需要根据键排序就选择TreeMap。
如果在多线程程序中, 使用java.util.concurrent包中的类,如果不需要根据键排序选择ConcurrentHashMap, 如果需要根据键排序选择ConcurrentSkipListMap
编写用户的注册与登录程序, 使用Map保存用户名与密码