第一章 面向对象
第二章 异常
第三章 数组
第四章 常用类
第五章 集合
第六章 IO流
第七章 线程
第八章 反射
第九章 Socket编程

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保存用户名与密码

全部教程