Java高级学习-Map

举报
AAAI 发表于 2021/04/02 22:25:56 2021/04/02
【摘要】 Map Map< K ,V>,将键映射到值,每一个键映射一个值。双列集合 key和value数据类型可以不相同 key不允许重复,value可以重复 HashMap HashTable是单线程的,HashMap是多线程的 HashMap< K, V> implements Map< K ,V> Map< K ,V&...

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。