Map

称之为键值对集合,键值都是对象存在,键对象在Map中不能重复出现,就像Set集合中元素不能重复出现。同样系统并不会把真正的对象放到Map中,而是存储的对象的引用。
常用方法:

void clear()//移除Map当中的所有映射关系

boolean containsKey(Object o)//查询Map中是否存在o键对象,存在返回true

Object get(Object o)//返回Map中键对象为o的映射值

boolean isEmpty()//判断是否为空,空返回true

Object put(Object key,Object value)//向Map中添加键值对

void putAll(Map m)//将m中的所有键值对加入到调用的Map当中

Object remove(Object o)// 若果存在o键对象,移除此键值对,并返回该键的映射值

int size()//返回Map中键值对的个数

HashMap
实现了接口Map,既不是Ordered也不是Sorted,通过对键计算哈希码来决定存储,不保证存储的顺序,该键允许null,但是只能出现一次。
因为底层的存储方式是按照计算哈希码决定的,所以在以自己的类对象当做键对象的时候需要复写hashcode()和equals()方法,保证正确使用。

HashTable
基本功能与HashMap类似,只是HashTable是同步的,特别注意的是该类中不允许出现null的键对象。

LinkedHashMap
底层是通过双链表实现,是一个Ordered类型的,按照插入顺序的Map,插入和删除的效率比HashMap底,但是遍历的效率高。

SortedMap与TreeMap

SortedMap
SortedMap继承自Map,是一个Sorted类型的,不管插入顺序如何,总是按键的天然顺序自动排序,因此其对象之间必须具有可比性,也就是实现Comparable接口。
常用方法

Object firstKey()//返回SortedMap中的第一个键对象,也是最小的键对象

Object lastKey()//返回SortedMap中的最后一个键对象,也是最大的键对象

SortedMap headSet(Object toElement)//返回一个小于toElement的键对象并且不包括该对象的SortedMap

SortedMap tailSet(Object fromElement)//返回一个包含该对象并且大于fromElement键对象的SortedMap

SortedMap subSet(Object toElement,Object fromElement)//返回一个两者之间的SortedMap,并且是[)左闭右开

TreeMap
TreeMap继承SortedMap,具备SortedMap的所有特征。因为键对象不能出现重复,所以自定义类对象作为键对象的时候需要实现CompareTo方法或者自定义比较器。

//自定义比较器
class myComparator extends Comparator{
    public int compare(Object o1,Object o2){
        Integer i1 = (Integer)o1;
        Integer i2 = (Integer)o2;

        return i2.intValue()-i1.intValue();
    }
main(){
    TreeMap t = new TreeMap(new myComparator);//以自定义的比较器作为比较顺序
}
}

映射的遍历

因为Map实现都是按键进行存储的,一般采用取出所有键然后取出对应的值。
获取键或者值集合的方法

public Set keySet()//返回一个包含Map所有键对象的Set

public Collection values()//返回一个包含Map所有值的集合

通过上述方法,如果修改返回的Set和Collection中的数据,则Map中对应的键值对也会发生相应的更改。

HashMap hm = new HashMap(m);
Set key = hm.keySet();
Iterator it = key.iterator();
while(it.hasNext()){
    Integer key = (Integer)it.next();
    String value = (String)hm.get(key);
}

通过Map转成Set集合就可以迭代,那么有另一个方法:entrySet,该方法将键和值的映射关系作为对象存储到了Set集合中,而这个映射关系的类型就是Map.Entry(接口)类型(例如结婚证这种映射关系)。

Map<Integer,String> map=new HashMap<Integer,String>(); 
Set<Map.Entry<Integer,String>> entrySet=map.entrySet();  //返回值是映射关系的Set集合  

        Iterator<Map.Entry<Integer,String>> it=entrySet.iterator();  

        while(it.hasNext()){  
            Map.Entry<Integer,String> me = it.next();  
            Integer key=me.getKey(); //通过Map.Entry对象的getKey,getValue获取其中的键和值  
            String value=me.getValue();  
            System.out.println(key+":"+value);  
        }