Java高级学习-Map
Map
Map< K ,V>,将键映射到值,每一个键映射一个值。双列集合
key和value数据类型可以不相同
key不允许重复,value可以重复
HashMap
HashTable是单线程的,HashMap是多线程的
HashMap< K, V> implements Map< K ,V>
Map< K ,V> map = new HashMap<>();
1.HashMap集合底层是哈希表,查询快,数组+单向链表/红黑树
2.HashMap集合是无序集合
LinkedHashMap< K, V> extends HashMap< K ,V>
使用:LinkedHashMap< K, V> linked = new LinkedHashMap < >( );
LinkedHashMap底层是哈希表 + 链表(保证迭代顺序),是有序集合。
Map接口的方法
添加:public V put( K key, V value) :返回值,存储键值对的时候,key不重复,返回值是null;key重复,使用新value替换原来的value,返回原来的value。
删除:public V remove(Object key) :将指定的键对于的键值对元素删除,返回被删除的值。不存在就返回null
获取值:public V get(Object key) ,返回对应的值,不存在就返回null
包含:boolean containsKey(Object key) ,包含返回true
遍历
通过键找值的方法:Set keySet() 返回此映射中包含的键的Set视图。
使用keySet() 取出Key,存储到Set集合中,遍历Set集合取出每一个Key,使用get(Key)找到value
Map< String ,Integer> map = new HashMap<>();
Set<String> set = map.keySet ( );
Iterator<String> it = set.iterator( );
while(it.hasNext( ) ) { String key = it.next(); Integer value = map.get(key); }
- 1
- 2
- 3
- 4
- 5
- 6
for ( String key : map.ketSet() ) {Integer value = map.get(key);}
- 1
Entry键值对对象
Map.Entry<K, V> : 在Map接口中有一个内部接口Entry 。
当Map集合一创建,Map集合中会创建一个Entry对象,记录键与值(键值对对象,键与值的映射关系)。
Set < Map.Entry< K, V> > entrySet ( ):
- 将Map集合内部的多个Entry对象取出来存储到一个Set集合。
- 遍历Set集合,获取每一个Entry对象。
- Entry对象中的getKey( )方法获取Key,getValue( )获取Value。
Set < Map.Entry< String, Integer> > set = map.entrySet ( ) ;
Iterator< Map.Entry< String, Integer>> it = set.iterator( );
while( it.hasNext( ) ) {
Map.Entry< String, Integer> entry= it.next( );
String key = entry.getKey(); }
- 1
- 2
- 3
- 4
- 5
for ( Map.Entry< String, Integer> entry : map.entrySet () ) { String key = entry.getKey(); }
- 1
HashMap存储自定义类型键值
Map集合保证key唯一:作为key的元素,必须重写hashCode方法和equals方法,以保证key唯一。
HashMap<String, Person> map = new HashMap<>( );
map.set("XXX", new Person ( "xxx" , xxx) );
for ( String key : map.ketSet() ) {Integer value = map.get(key);}
- 1
- 2
- 3
但是HashMap<Person, String> map = new HashMap<>( ); 这样需要必须重写hashCode,保证键唯一。
Hashtable
双列集合。任何非null对象都可作为键和值。且为单线程。
HashMap:底层是一个哈希表,但是是多线程。
Hashtable:底层是一个哈希表,但是是单线程。
Hashtable的子类Properties集合是一个唯一和IO流相结合的集合。
JDK9集合添加
List接口,Set接口,Map接口:添加了一个静态的方法of,给集合一次性添加多个元素。前提:集合中存储的元素个数已确定,不能改变。
static list of (E … elements)
- of方法只适用于List接口,Set接口,Map接口
- of方法返回值是一个不能改变的集合,不能使用add,put进行添加元素
- Set接口,Map接口在调用of方法时,不能添加重复元素,否则非法参数异常
List list = List.of(“xx”,“x”);
文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_38022166/article/details/115381980
- 点赞
- 收藏
- 关注作者
评论(0)