集合Map


 

 

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();
}













 

 

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值