栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【java笔记】map集合

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【java笔记】map集合

map:将键(k)映射到值(v)的对象,通过键可以找到对应的值

Map集合的特点:

1、双列集合,一个元素包含两个值(key-Value)

2、key和value类型可以相同,也可以不同

3、key和value是一一对应的

4、key不允许重复,value是可以重复的

常用实现类:

HashMap implements Map接口

特点:

1、底层是哈希表,查询速度快

JDK1.8之前,数组+单向链表

JDK1.8之后,数组+单向链表/红黑树(链表长度超过8):提高查询的速度

2、元素无序:储存元素和取出元素顺序可能不一致

linkedHashMap

1、linkedhashmap集合底层是哈希表+链表

2、linkedhashmap集合是一个有序的集合,储存元素和取出元素的顺序是一致的

常用方法:

public V put(K key,V value):把指定的键与指定的值添加到Map集合中

储存键值对的时候,key不重复,返回值v是null

储存键值对的时候,key重复,会使用新的value替换map中重复的value,返回被替换的value值

Mapmap=new HashMap<>();
String v1=map.put("a","A");
v1:null
String v2=map.put("a","aa");
v2:aa
map:[a-aa]

一般用put时,无需接受返回值

map.put("a","A");
map.put("b","B");
map.put("c","C");
map:[a-A,b-B,c-C]

public V remove(Object Key):把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值

key存在,v返回被删除的值

key不存在,v返回null,使用包装类接收返回值(防止空指针异常)

建议:使用数据类型时,尽量使用包装类

String s=map.remove("a");
s:A
map:[b-B,c-C]
boolean V containsKey(Object key):判断集合中是否包含指定的键

包含返回true,不包含返回false

boolean b1=map.containsKey("b");true
boolean b2=map.containsKey("e");false
public v get(Object key):根据指定的键,在Map集合中获取对应的值

key存在,返回对应的值

key不存在,返回null

String s1=map.get("b");
String s2=map.get("e");
s1:B
s2:null

public Set keyset():获取Map集合中所有的键,储存到Set集合中

Map集合第一种遍历方式:键找值

keySet()取键放入   set遍历set集合  get

Setset=map.keySet();
for(String s:set){
    sout(map.get(s));
}

​
public Set>entrySet():获取到Map集合中所有键值对对象的集合(Set集合)

 entrySet()把entry对象放入set,用getVaule和getKey访问

Set>set=map.entrySet();
for(Map.Entrt entry:set){
 sout(entry.getKey()+entry.getValue());
  
}
HashMap储存自定义类型键值 

Map集合保证key是唯一的。作为key的元素,必须重写hashcode和equals方法,以保证key唯一

由于string类型已经重写 了hashcode和equals方法,所以元素不会重复

HashMapmap;
map.put("a",new Stu("1",1));
map.put("b",new Stu("2",2));
map.put("a",new Stu("3",3));
map:b 2 2,a 3 3
HashMapmap;
map.put(new Stu("a",1),a);
map.put(new Stu("a",1),b);
//如果以自定义类型为键,那么在自定义类中要重写hashcode和equals方法,防止重复
  @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Stu stu = (Stu) o;
        return age == stu.age && Objects.equals(name, stu.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
linkedHashMap:

1、继承了HashMap类

2、底层原理:哈希表+链表(记录元素顺序),所以linkedHashMap是有序的(存入和取出顺序一致)

linkedHashMapmap=new linkedHashMap<>();
map.put("c",c);
map.put("a",a);
map:c-c,a-a
Hashtable:

1、底层是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢

2、不可以存储null值,null键(其他的hash集合可以)

3、JDK1.2之后已经被HashMap取代

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749269.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号