Map集合存储键值对。一对一对往里存。而且要保证键的唯一性。
1.添加
put(K key,V value)
putAll(Map<? extends K,? extends V> m)
2.删除
clear()
remove(Object Key)
3.判断
containsValue(Object value)
containsKey(Object key)
isEmpty()
4.获取
get()
size()
values()
entrySet()
KeySet()
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的 jdk1.0 效率低
为了成功地在哈希表中存储或获取对象,用作键的对象必须实现hashcode方法和equals方法
|--HashMap:底层是哈希表数据结构,可以存入null键null值。该集合线程不同步的 jdk1.2 效率高
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序
和Set很想
其实,Set底层就是使用了Map集合
ps:
可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断
添加元素时,如果出现添加时,相同的键。那么后添加的会覆盖原有的键对应值,并put方法会返回被覆盖的值
map集合的两种取出方式
1.Set<k> keySet:将map中所有的键存入到set集合。因为set具备迭代器。
所以可以用迭代器取出所有的键,再根据get方法。获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出
2.Set<Map.Entry<k,v>> entrySet: 将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry
第一种方式:
public static void main(String[] args)
{
Map<String,String>map=new HashMap<String,String>();
map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("01","zhangsan1");
map.put("04","zhangsan4");
//先获得map集合的所有键的set集合,Keyset();
Set<String> keySET=map.keySet();
//有了Set集合,就可以获取迭代器
Iterator<String> it=KeySet.iterator();
while(it.hasNext())
{
String key=it.hasNext();
//有了键可以通过map集合的get方法获取其对应的值
String value=map.get(key);
System.out.println("Key:"+key+"value:"+value);
}
}
第二种方式:
public static void main(String[] args)
{
Map<String,String> map=new HashMap<String,String>();
map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("01","zhangsan1");
map.put("04","zhangsan4");
//将Map集合中的映射关系取出,存入到Set集合中
Set<Map.Entry<String,String>> entrySet=map.entrySet();
Iterator<Map.Entry<Stirng,String>> it=entrySet.iterator();
while(it.hasNext())
{
Map.Entry<String,Stirng> me=it.next();
String key=me.getKey();
String value=me.getValue();
System.out.println(key+""+value);
}
-------------------------------------------------------------------------------------------------------------
map的扩展知识:(循环嵌套)
map集合被使用因为具备映射关系。
一个学校有多个教室,一个教室又有多个学生
第一种方式:
HashMap的嵌套使用
class Demo
{
public static void main(string[] args)
{
//学校
HashMap<String,Hash<String,String>> czbk=new HashMap<String,HashMap<String,String>>();
//预热班
HashMap<String,String> yure=new HashMap<String,String>();
//就业班
HashMap<String,String> jiuye=new HashMap<String,String>();
czbk.put("yureban",yure);
czbk.put("jiuyeban",jiuye);
yure.put("01","zhangsan");
yure.put("02","lisi");
jiuye.put("01","zhaoliu");
jiuye.put("02","wangwu");
//遍历czbk集合,获取所有的教室
Iterator<String> czbk.keySet().iterator();
while(it.hasNext())
{
String roomName=it.next();
HashMap<String,String> room=czbk,get(roomName);
System.out.println(roomName);
getStudentInfo(room);
}
// getStudentInfo(jiuye); //调用下面方法获取就业班或者预热班的信息
}
public static void getStudentInfo(HashMap<String,String> roomMap)
{
Iterator<String> it=roomMap.keySet().iterator();
while(it.hasNext())
{
String id=it.next();
String name=roomMap.get(id);
System.out.println(id+":"+name);
}
}
}
第二种方式(常见)
把Student 放到list集合里
class Student
{
private String id;
private String name;
Student(String id,String name)
{
this.id=id;
this.name=name;
}
public String toString()
{
return id+":"+name;
}
}
class MapDemo
{
public Static void demo()
{
HashMap<String ,List<Student>> czbk=new HashMap<String,List<Student>>();
List<Student> reyu=new ArrayList<Student>();
List<Student> jiuye=new ArrayList<Student>();
czbk.put("yureban",reyu);
czbk.put("jiuyeban",jiuye);
reyu.add(new Student("01","zhangsan"));
reyu.add(new Student("04","wangwu"));
jiuye.add(new Student("01","zhaoliu"));
jiuye.add(new Student("01","liqi"));
Iterator<String> it=czbk.keySet().iterator();
while(it.hasNext())
{
String roomName=it.next();
List<Student> room=czbk.get(roomName);
System.out.println(roomName);
getInfos(room);
}
}
public static void getInfos(List<Student> List)
{
Iterator<Student> it=list.iterator();
while(it.hasNext())
{
Student s=it.next();
System.out.println(s);
}
}
public Static void main(String[] args)
{
demo();
}