HashMap
由键就决定:无序、不重复、无缩影。HashMap底层是哈希表结构的 依赖hashCode方法保证键的唯一 如果键要存储的是自定义对象,需要重写hashCode和equals方法 基于哈希表。增删改查的性能都较好
LinkedHashMap集合
由键决定:有序、不重复、无索引 这里的有序指的是保证存储和取出的元素顺序一致 原理:底层数据结构是依然哈仪表,只是每个键值对元素有额外多了一个双链表的机制记录存储的顺序
Map< String, Integer> maps= new LinkedHashMap < > ( ) ;
maps. put ( "娃娃" , 30 ) ;
maps. put ( "手表" , 10000 ) ;
maps. put ( "huawei" , 10000 ) ;
maps. put ( "生活用品" , 10 ) ;
maps. put ( "手表" , 10 ) ;
System. out. println ( maps) ;
TreeMap集合概述
由键决定特性:不重复、无索引,可排序 可排序:按照键数据的大小默认升序(由大到小)排序。只能对键排序 注意:TreeMap集合是一定要排序的,可以默认排序,也可以将按照指定的规则进行排序 TreeMap跟TreeSet一样底层原理是一样的 TreeMap集合自定义排序规则有2中 -类实现Comparable接口,重写比较规则
Map集合实现类的特点
HashMap:元素按照键是无序,不重复,值不做要求,基于哈希表(与Map体系一致) LinkedHashMap:元素按照键是有序 ,不重复,无索引,值不做要求 TreeMap:元素只能按照键排序 ,不重复,无索引,值不做要求,可以做排序
Map集合案例-统计投票人数(集合嵌套)
public static void main ( String[ ] args) {
Map< String, List< String> > data= new HashMap < > ( ) ;
List< String> selects= new ArrayList < > ( ) ;
Collections. addAll ( selects, "A" , "C" ) ;
data. put ( "罗勇" , selects) ;
List< String> selects1= new ArrayList < > ( ) ;
Collections. addAll ( selects1, "A" , "C" ) ;
data. put ( "胡桃" , selects1) ;
System. out. println ( data) ;
Map< String, Integer> infos= new HashMap < > ( ) ;
Collection< List< String> > values= data. values ( ) ;
for ( List< String> value: values) {
for ( String s: value) {
if ( infos. containsKey ( s) ) {
infos. put ( s, infos. get ( s) + 1 ) ;
} else {
infos. put ( s, 1 ) ;
}
}
}
System. out. println ( infos) ;
}