在java的util包中提供了集合中最常见的接口和类,最常见的集合类就是List和Map。严格意义上来区分它属于接口的范畴,因为在集合中很多子类是用来实现此接口的。但是在实际应该用和操作时,也被成为类也不为过,它具有类所具有的属性和方法。List的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象元素列表。List 适用于按数值索引访问元素的情况。
Map集合中常见的三个子接口:
Map
|--Hashtable :底层数据结构是是哈希表结构,该集合是线程同步的,效率低
此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以 用作键或值用作键的对象必须实现hashCode 方法和 equals 方法
|--HashMap: 底层也是哈希表数据结构,并允许使用 null 值和 null 键,此集合线程是不同步 效率高
|--TreeMap: 底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序
不难发现,Set集合的特点和Map集合的特点非常相似,其实,Set底层就是使用了Map集合,它的很多方法都是调用Map集合的。
与List中的ArrayList进行对比,ArrayList给元素加索引方便存取,而Map既有索引,又有元素,
Map 集合类用于存储元素对(称作“键”和“值”)。 在java.util包中 ,接口Map<K,V> K是指key,V是Value,在API文档中的定义是public interfaceMap<K,V> , 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
Map集合中常见的基本方法分为添加,删除,判断和获取,如下所示:
<1>.添加:
a.
返回值类型 V put(K, V )
将指定的值与此映射中的指定键关联
b.
返回值类型 void putAll(Map<? extends K,? extends V> m)
从指定映射中将所有映射关系复制到此映射中
<2>.删除:
返回值类型 void clear() 从此映射中移除所有映射关系
<3>.判断:
a.判断Key的存在:
返回值类型 boolean containsKey(Object key)
如果此映射包含指定键的映射关系,则返回 true
b.判断Value的存在:
返回值类型 boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true
<4>.获取:
a.
返回值类型 V get(Object key)
返回指定键所映射的值,若此映射不包含该键的映射关系,则返回null
b.
返回值类型 int size()
返回此映射中的键-值映射关系数
c.
返回值类型 Collection<V> values()
返回此映射中包含的值的 Collection
视图
<5> 重点:
1. entrySet() 返回此映射中包含的映射关系的 Set 视图。
2. keySet() 返回此映射中包含的键的 Set 视图
方法应用代码示例:
package com.itheima.day16;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
* @author Alan
* @date 2014年6月13日
*/
public class MapDemo01 {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<Integer,String>();
//1.添加元素
//注意特殊:当存入相同的键时,新的值会替换旧的值,put会在以下的第一行返回null,因为之前的集合中 是没有值的,
//所以会返回null,原因是它会返回原来的值
System.out.println("put:"+map.put(01,"Abby")); //运行结果 put:null
System.out.println("put:"+map.put(01,"zhangsan")); //运行结果 put:Abby
map.put(01,"Abby");
map.put(02,"Michael");
map.put(03,"Alan");
//2.调用containsKey()方法,判断是否有02,即判断指定的Key是否存在,此例中返回true
System.out.println("containsKey:"+map.containsKey(05));
//3.删除。(若没有要删除的元素,就直接返回null,若该元素存在,在删除完键之后,返回的是键所对应的值)
System.out.println("remove:"+map.remove(02));
//4.打印删除后的集合
System.out.println(map);
//5.获取 (若没有要查找的值,就会返回null,用get()方法,也可以判断键来确定是否存在对应的值)
System.out.println("get:"+map.get(01));
//6.特殊的一种情况,可以通过get方法的返回值来判断一个键是否存在,通过返回null来判断
//需要注意的是:在Hashtable中是不可添加空的key或Value的,因为其不允许null键和null值的
map.put(null,"Jay");
System.out.println("get:"+map.get(null));
//7.获取map集合的所有值
Collection<String> coll = map.values();
System.out.println(coll);
System.out.println(map);
}
}