课程回顾:
数组
异常
常用类
集合
今日内容:
集合:动态存储多个对象
JAVA中集合的分类:
1、Collection<E>
1、List<E>:
1、ArrayList<E>
2、LinkedList<E>
2、Set<E>:
1、HashSet<E>
2、TreeSet<E>
3、LinkedHashSet<E>
2、Map<K,V>:存储键值对(K-V)的元素
1、HashMap<K,V>
2、TreeMap<K,V>
HashMap<K,V>:存储键值对信息
键不可重复
存储的键为自定义类时,一般重写hashCode和equals方法,进行验重
常用方法:
put:如果键不存在,则添加,否则就修改并将原来的值返回
containsKey:验证是否包含指定的键
containsValue:验证是否包含指定的值
remove:移除指定键的元素并返回对应键的值
size:获取元素个数
keySet:获取所有键的Set集合对象
get:获取指定键对应的值
values:获取所有值的集合对象
Map集合的遍历方式:
1、keySet:获取所有键的Set集合对象Set<K>
2、entrySet:获取所有元素的Set集合对象Set<Entry<K,V>>----(Map集合特有的)
Map.Entry<K,V>:是Map接口的静态内部接口
每个对象记录的就是Map集合中的每个元素
常用方法:
getKey:获取当前元素的键
getValue:获取当前元素的值
练习:请创建HashMap<Student,Phone>存储学生手机信息
注意学生的重复(结合HashSet)
练习2:请使用随机数生成100个[A-F]字母
HashMap<Integer,Character>
请统计每个字母出现的次数,请使用HashMap<Character,Integer>进行存储
TreeMap<K,V>:存储键值对,根据键进行排序
键为自定义类时,要求必须可排序,也就是实现比较器接口
常用方法:
put:
first
last
ceiling
floor
higher
lower
pollFirst
pollLast
扩展之HashTable:
HashMap和HashTable的区别?
HashMap:
1、实现的是AbstractMap<K,V>
2、允许有null键和null值的存在
3、containsKey和containsValue方法
4、不安全
HashTable:
实现的是Dictionary<K,V>
不能有null键或null值的存在
contains:验证是否存在指定的值
安全的
HashTable<K,V>:存储键值对信息
常用子类:
Properties:属性集类
将键值对信息保存到流中或从流中加载键值对信息
常用方法:
load:从指定的流中加载键值对信息
store:将属性集对象中的键值对信息保存到流中
setProperty:设置键值对信息,键存在则修改,键不存在则添加
getProperty:获取指定键的值
集合小结:
List:有序,可重复,有索引
Set:无序,不可重复,无索引
Map:存储键值对,常常用于记录和查询,很少用于遍历输出
读和改效率:
Hash*:两者效率都很高
ArrayList:读(索引)效率很高,写和删效率较低
LinkedList:读效率较低,写和删效率较高
数组和集合:
开发中优先选择数组
再考虑集合
Map<Student,HashSet<Phone>>
TreeMap<Student,TreeSet<GrilFriend>>