Java面向对象
Java异常
Java数组
Java常用类
Java集合
Java IO流
Java线程
Java反射
Socket编程
Java注解开发
Java GoF设计模式
HashMap
Java内存模型
Java线性表

Java Map集合小结

Map集合

按<键,值>对的形式存储元素

put( k, v),  containsKey( k ),  containsValue( v ) , get( k ),  remove( k )

keyset()  ,  values(),  entrySet()

HashMap

底层是哈希表(散列表),  哈希表就是一个数组, 数组的每个元素是一个单向链表

HashTable

底层是哈希表, 它是线程安全的, HashMap不是线程安全的

初始化容量:11, HashMap初始化容量: 16

加载因子: 0.75,  当<键,值>对的数量大于 哈希桶容量 * 加载因子时,  哈希桶扩容

HashTable默认扩容: 2倍 + 1  ,  HashMap扩容: 2倍

HashTable的键与值都不能为null,  HashMap的键与值可以为null

创建HashTable时, 可以指定初始化容量;   HashMap会自动把初始化容量调整为2的幂次方,就是为了快速计算数组的下标

Properties

继承了HashTable, 键与值都是String类型

经常用于设置/读取系统属性值

一般情况下, 系统属性会保存在配置文件中, 可以通过Properties读取配置文件的内容, 也可以使用ResouceBundle读取配置文件的属性

TreeMap

实现了SortedMap接口, 可以根据键自然排序, 要求键必须是可比较的

要么指定Comparator比较器, 如果没有Comparator比较器,键需要实现Comparable接口

Comparator比较与Comparable如何选择?

对于TreeMap来说, 先根据Comaparator比较器进行比较大小 , 如果没有Comparator比较器, 再选择Comparable接口。

对于开发人员来说, 一般通过实现Comparable接口定义一个默认的比较规则 , 通过Comparator比较器定义若干不能同的排序规则。

如何选择Map?

如果不需要根据键排序就选择HashMap, 如果需要根据键排序就选择TreeMap。

如果在多线程程序中, 使用java.util.concurrent包中的类,如果不需要根据键排序选择ConcurrentHashMap, 如果需要根据键排序选择ConcurrentSkipListMap

练习:

编写用户的注册与登录程序, 使用Map保存用户名与密码