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); }
for ( String key : map.ketSet() ) {Integer  value = map.get(key);}

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();   }
for ( Map.Entry< String, Integer>  entry : map.entrySet () ) { String key =  entry.getKey();  }

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);}

但是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”);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值