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 , HashMap , Hashtable , 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)