黑马程序员技术交流社区
标题: 求解 ,关于HashMap()中,键-----值对的问题 [打印本页]
作者: 杨兴庭 时间: 2013-5-9 20:57
标题: 求解 ,关于HashMap()中,键-----值对的问题
本帖最后由 杨兴庭 于 2013-5-10 11:57 编辑
集合使用过程:
第1步:封装对象
第2步:声明对象
第3步:确定要使用的集合类型
第4步:声明集合
第5步:将声明的对象添加到集合中
第6步:调用集合内对象内属性
在使用HashMap()使用方法产生的疑问:
/*声明集合*/
Map a=new HashMap();
/*将声明的对象添加到集合中*/
是通过 a.put(键 , 值); 的方式添加的,其中的键是自定义的标识,“键”的内容要求是不可重复且是无序的;“值”内存储的是对象,根据万物皆对象的思想,集合也可以看做一个对象,
那么向集合中添加集合时,即: a.put(键, 集合);
问题:在第6步中,我要调用存储在集合中的集中的对象中的属性,该怎么调用?麻烦讲解下下思路,最好附实例。谢谢。。。。。。。。
作者: 风乐 时间: 2013-5-9 22:08
可以一步一步把集合拆开取值啊,代码参考毕老师那个学校有班,班里有学生的那个
import java.util.*;
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 Demo
{
public static void main(String[] args)
{
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","zhagnsa"));
reyu.add(new Student("04","wangwu"));
jiuye.add(new Student("01","zhouqi"));
jiuye.add(new Student("02","zhaoli"));
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 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);
}
}
}
作者: 任江峰 时间: 2013-5-9 22:41
本帖最后由 任江峰 于 2013-5-9 22:42 编辑
- import java.util.*;
- class MapDemo
- {
- public static void main(String[] args)
- {
- //学校集合
- Map<String,Set<Student>> xuexiao = new HashMap<String,Set<Student>>();
- //班级集合
- Set<Student> banji01 = new HashSet<Student>();
- Set<Student> banji02 = new HashSet<Student>();
- //在学校集合中存入班级
- xuexiao.put("HeiMaBan01",banji01);
- xuexiao.put("HeiMaBan02",banji02);
- //在班级集合中存入学生
- banji01.add(new Student(01,"zhanshan01"));
- banji01.add(new Student(02,"zhanshan02"));
- banji01.add(new Student(03,"zhanshan03"));
- banji02.add(new Student(01,"lisi01"));
- banji02.add(new Student(02,"lisi02"));
- banji02.add(new Student(03,"lisi03"));
- //取出班级集合
- Set<Map.Entry<String,Set<Student>>> entrySet = xuexiao.entrySet();
- Iterator<Map.Entry<String,Set<Student>>> it = entrySet.iterator();
-
- while(it.hasNext())
- {
- Map.Entry<String,Set<Student>> me = it.next();
- //取出班级名
- String banjiming = me.getKey();
- System.out.println("班级:"+banjiming);
- //取出班级集合
- Set<Student> banjiSet = me.getValue();
- //取出班级集合中的所有学生
- showStudent(banjiSet);
- }
- }
- static void showStudent(Set<Student> banjiSet)
- {
- if(banjiSet == null)
- return;
- Iterator<Student> it = banjiSet.iterator();
- //取出Student对象
- while(it.hasNext())
- {
- Student s = it.next();
- System.out.println(s.getId()+"....."+s.getName());
- }
- }
- }
- class Student
- {
- private int id;
- private String name;
- Student(int id, String name)
- {
- this.id = id;
- this.name = name;
- }
- public int getId()
- {
- return id;
- }
- public String getName()
- {
- return name;
- }
- }
复制代码 我上面的例子,在学校Map里面放了班级Set,班级Set里面放了学生Student。
然后遍历学校Map取出班级Set,再遍历班级Set,取出学生Student对象,并调用了Student类的id和name属性打印出来。
毕老师的Java基础视频,第16天的(Map扩展)里面有相关知识。
作者: 刘学明 时间: 2013-5-9 22:51
直接就能调用的啊 存入的集合元素中有你需要调用的方法 上面的讲解可以了
作者: 、__WSD吴少东 时间: 2013-5-9 23:01
HashMap 集合,
打个比方,可能不恰当
键盘上,都刻有对应的字母,对吧。可是有好多的输入法,比方说日文,或者说英式键盘,他们大致上是有差别的,如果用一个刻有美式键盘字母的键盘敲击一个英式或者日文的输入法,打印出来的字,就不是想要打印的字,因为他们的对应关系,不是你自己所认为的
我说这些的意思是想说,HashMap 就是键和值的对应关系,只要找到键,那值就出来了,
小学没毕业,表达能力不好...见笑了,希望对你有帮助
作者: 黑马龙子 时间: 2013-7-24 21:53
用容器,就像类似与上面的集合使用过程:用一个专门存放数据的类,
class map2<K,V>//泛型,填写你想要的数据类型
{
private K key;
private V value;
public map2(K k2,V v2){key=k2;value=v2;} //初始化key和value
public K getKey(){return key;}
public V getValue(){return value;}
public void setKey(K key2){this.key=key2;}
public void setValue(V value2){this.value=value2;}
}
然后就可以用ArrayList arr=new ArrayList()来添加任意的键值对应的数据了,
当然每次添加都要先map2<object,object> bb=new map2<object,object>();object根据你的实际需要填写不同的数据类型,实在不爽就直接填object吧,arr.add(bb);...........
我是这样思考的,希望能有帮助......
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |