map详解

Map

介绍

map是一个接口;并且不再是继承自collection接口;

也就是说应该将collection和map对应起来,前者是每一个元素只有一个值,可以称之为单列集合,后者是每一个元素都有两个值,应该称之为双列集合。

All Known Subinterfaces:
Bindings , ConcurrentMap <K,V>, ConcurrentNavigableMap <K,V>, LogicalMessageContext , MessageContext , NavigableMap <K,V>, SOAPMessageContext , SortedMap <K,V>

所有已知实现类:
AbstractMap , Attributes , AuthProvider , ConcurrentHashMap , ConcurrentSkipListMap , EnumMap , HashMapHashtable , IdentityHashMap , LinkedHashMap , PrinterStateReasons , Properties , Provider , RenderingHints , SimpleBindings , TabularDataSupport , TreeMap , UIDefaults , WeakHashMap

将键映射到值的对象。 地图不能包含重复的键; 每个键可以映射到最多一个值。

注意:如果使用可变对象作为地图键,必须非常小心。 如果对象的值以影响equals比较的方式更改,而对象是地图中的键,则不会指定地图的行为。 这个禁令的一个特殊情况是,地图不允许将自己包含在内。 虽然地图可以将其本身作为一个值,但建议您非常小心: equals和hashCode方法在这样的地图上已经不太明确。(说白了就是,如果使用自定义的类型作为键,就必须重写hashCore()和equals())

Nested Classes(嵌套类)
static interface Map.Entry<K,V>
地图条目(键值对)。(当Map集合一创建,就会在Map集合中创建一个Entry对象,用来记录键与值的映射关系。注意:Entry对象有两个方法,一个getKey(),一个getValue())

方法

所有方法 接口方法 抽象方法

void clear()
从该地图中删除所有的映射(可选操作)。

boolean containsKey(Object key)
如果此映射包含指定键的映射,则返回 true 。

boolean containsValue(Object value)
如果此地图将一个或多个键映射到指定的值,则返回 true 。

Set<Map.Entry<K,V>> entrySet()
返回此地图中包含的映射的Set视图。说白了就是Entry对象的set集合。

V get(Object key)
返回到指定键所映射的值,或 null如果此映射包含该键的映射。

Set keySet()
返回此地图中包含的键的Set视图。说白了就是key的set集合

V remove(Object key)
如果存在(从可选的操作),从该地图中删除一个键的映射。

default boolean remove(Object key, Object value)
仅当指定的密钥当前映射到指定的值时删除该条目。

default V replace(K key, V value)
只有当目标映射到某个值时,才能替换指定键的条目。

default boolean replace(K key, V oldValue, V newValue)
仅当当前映射到指定的值时,才能替换指定键的条目。

V put(K key, V value)
将指定的值与该映射中的指定键相关联(可选操作)。

子类:HashMap

介绍

All Implemented Interfaces:
Serializable , Cloneable , Map <K,V>

已知直接子类:
LinkedHashMap , PrinterStateReasons

public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable

基于哈希表的实现的Map接口。 此实现提供了所有可选的地图操作,并允许null的值和null键。 ( HashMap类大致相当于Hashtable ,除了它是不同步的,并允许null)。

这个类不能保证地图的顺序

孙子类:LinkedHashMap

介绍

public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>

哈希表和链表实现的Map接口,具有可预测的迭代次序。(说白了就是,哈希表+链表,其中多出来的链表用于记录顺序)

所以,它比它爹强,是有序的。

请注意,此实现不同步。(和它爹一样)

子类:Hashtable

介绍

Hashtable<K,V>
该类实现了一个哈希表,它将键映射到值。

All Implemented Interfaces:
Serializable , Cloneable , Map <K,V>

已知直接子类:
Properties , UIDefaults

该类实现了一个哈希表,它将键映射到值。 任何非null对象都可以用作键值或值。(也即是说,这哥们只能非null对象进来)

Hashtable是同步的。 如果不需要线程安全的实现,建议使用HashMap代替Hashtable 。 如果需要线程安全的并发实现,那么建议使用ConcurrentHashMap代替Hashtable 。(这哥们定位,额。。。就是线程安全且非并发,说白了就是单线程嘛,就是速度慢就对了)

孙子类:Properties

虽然Hashtable被淘汰了,但是它的子类Properties集合依然活跃,因为它是唯一一个和io流相结合的集合。

Properties类表示一组持久的属性。 Properties可以保存到流中或从流中加载。 属性列表中的每个键及其对应的值都是一个字符串。

这个类是线程安全的:多个线程可以共享一个Properties对象,而不需要外部同步。

public class Properties
extends Hashtable<Object,Object>

方法

Object setProperty(String key, String value)
致电 Hashtable方法 put

String getProperty(String key)
使用此属性列表中指定的键搜索属性。get

Set stringPropertyNames()
返回此属性列表中的一组键,其中键及其对应的值为字符串,包括默认属性列表中的不同键,如果尚未从主属性列表中找到相同名称的键。(keySet()方法)

void store(Writer writer, String comments)
将此属性列表(键和元素对)写入此 Properties表中,以适合使用 load(Reader)方法的格式输出到输出字符流。(注意:comment是文件的注释,不要用中文,一般就是"")

void load(InputStream inStream)
从输入字节流读取属性列表(键和元素对)。
void load(Reader reader)
以简单的线性格式从输入字符流读取属性列表(关键字和元素对)。(就是能中文和不能中文的区别)
(注意:存储键值对的文件中,键值对的连接符号可以使用=,或者空格;
可以使用#注释;被注释不再被load)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值