Collection接口是保存单值最大的父接口,那么Map接口保存的内容是一对值,所有的内容是以:key->value的形式保存的。
Map接口本身有三个常用的子类:
HashMap,Hashtable,TreeMap
Map接口下的操作方法:
V put(K key,V value):增加内容
V get(Object key):取得设置的内容,根据key取得
boolean contarinsKey(Object key):查找指定的key是否存在
boolean containsValue(Object value):查找指定的value是否存在
boolean isEmpty():判断集合是否为空
Set<K> keySet():将全部的key变为Set集合
Collection<V> values():将全部的values变为Collection集合
V remove(Object key):根据key删除内容
void putAl(Map<? extends K,? extends V>m):增加一组数据
新的子类:HashMap
import java.util.*;
public class HashMapDemo {
public static void main(String args[])
{
Map<String,Integer> map=new HashMap<String,Integer>();
map.put("1", 1);
map.put("2", 2);
map.put("3", 3);
map.put("4", 4);
map.put("5", 5);
int value=map.get("1");
System.out.println(value);
System.out.println(map);
//Map中的全部key以Set集合的形式返回
Set<String> set=map.keySet();
Iterator<String> iter=set.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}
HashMap属于无序的操作,也可以通过values()方法,将全部的value通过一个Collection接口的形式返回。
Collection<Integer> col=map.values();
HashTable只是扩展了集合操作类,其应哟个实现了Map接口而已。
HashMap:采用异步处理,非线程安全的操作。
Hashtable:采用同步处理,线程安全操作。
按Key排序的子类:TreeMap
TreeMap使用的时候可以进行按照key的方式进行排序。
Map<String,Integer> map=new TreeMap<String,Integer>();
如果现在给定任意的一个类,然后实现排序,那么这个类要实现Comparable接口。
Map不能直接使用Iterator输出,在Map中虽然是以一对值的形式出现的,可是真正的保存的还是一个单独的对象,即:程序将key->value的放在一个对象之中,之后将此对象加入到集合里。
Map.Entry(K,V),从定义格式上可以发现,此类属于static声明的接口,而且是一个内部接口。
一个Map里面包含有很多对Map.Entry,而Map.Entry里面含有key->value,所以可以知道Map接口使用Iterator输出的标准操作。
1,通过Map接口中的:Set<Map.Entry<K,V>> entrySet()方法取得Set集合
2,通过Set接口为Iterator进行初始化的操作。
3,通过Iterator取出每一个Map.Entry
4,通过Map.Entry进行key与value的分离
import java.util.*;
public class IteratorMapDemo {
public static void main(String args[])
{
Map<String,Integer> map=new HashMap<String,Integer>();
map.put("1", 1);
map.put("2", 2);
map.put("3", 3);
map.put("4", 4);
Set<Map.Entry<String, Integer>> alset=map.entrySet();
Iterator<Map.Entry<String, Integer>> iter=alset.iterator();
while(iter.hasNext())
{
Map.Entry<String, Integer> me=iter.next();
System.out.println(me.getKey()+"-->"+me.getValue());
}
}
}
也可以使用foreach操作Map.Entry<>
for(Map.Entry<String,Integer> me:map.entrySet())
在Map中可以使用匿名对象找到一个key对应得value
Map<String,Person> map=new HashMap<String,Person>();
map.put("zs",new Person("张三",30));
System.out.println(map.get(new String("zs")));
但是如果是使用Map<Person,String>那么取不出对应的String值,除非Person类实现了equals()和hashCode()方法来区分是否是同一个对象。
如果是用非系统类作为key的话,那么该类要实现equals()和hashCode()方法。