黑马程序员技术交流社区

标题: Map的疑惑 [打印本页]

作者: 梁航斌    时间: 2013-4-8 12:02
标题: Map的疑惑
本帖最后由 梁航斌 于 2013-4-9 08:18 编辑

map只能存一个键一个值,有没有办法,让它存的东西多一点呢?
作者: 绿树林    时间: 2013-4-8 12:10
你可以把一个对象的名字当成一个值,然后存进去,这样你就可以想存什么就写个对象存进去。
作者: 郭沐昌    时间: 2013-4-8 13:06
(1) 集合(Collection):一组单独的元素,通常应用了某种规则。在这里,一个 List(列表)必须按特定
的顺序容纳元素,而一个Set(集)不可包含任何重复的元素。相反,“包”(Bag)的概念未在新的集合库
中实现,因为“列表”已提供了类似的功能。
(2) 映射(Map):一系列“键-值”对(这已在散列表身上得到了充分的体现)。从表面看,这似乎应该成
为一个“键-值”对的“集合”,但假若试图按那种方式实现它,就会发现实现过程相当笨拙。这进一步证
明了应该分离成单独的概念。另一方面,可以方便地查看 Map的某个部分。只需创建一个集合,然后用它表
示那一部分即可。这样一来,Map 就可以返回自己键的一个Set、一个包含自己值的List 或者包含自己“键
-值”对的一个List。和数组相似,Map可方便扩充到多个“维”,毋需涉及任何新概念。只需简单地在一
个Map 里包含其他Map(后者又可以包含更多的Map,以此类推)。
作者: 王大斌    时间: 2013-4-8 13:12
map中的值可以存储任何对象,包括list set map和各种对象,这就使map更加广泛
作者: whs_nk    时间: 2013-4-8 14:12
Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式存入或查看某个映射的内容,这里是一个题目,是Map的一个简单应用,通过理解希望能够帮到你哦
  1. /*
  2. 题目:设某个学校有多个班级,班级中有多名学生,
  3.           试通过集合思想打印每个学生的信息(学号、姓名)
  4.           班级按1班,2班...顺序打印(不使用Collections)
  5. 分析:一个学校有多个班级,每个班级有多个学生,可以创建HashMap集合,
  6.           一次迭代取出班级信息,进而进行二次迭代,取出班级中的学生对象,
  7.           最后根据学生类提供的方法获取学号和姓名。
  8.           针对打印,可以设置班级比较器

  9. */

  10. import java.util.*;
  11. class Student//学生类
  12. {
  13.         private String id;
  14.         private String name;

  15.         Student(String id,String name)
  16.         {
  17.                 this.name = name;
  18.                 this.id = id;
  19.         }

  20.         public String getName()
  21.         {
  22.                 return name;
  23.         }

  24.         public String getId()
  25.         {
  26.                 return id;
  27.         }

  28. }

  29. class SomeClass//教室类
  30. {
  31.         private String className;
  32.         SomeClass(String name)
  33.         {
  34.                 this.className = name;
  35.         }
  36.         public String getName()
  37.         {
  38.                 return className;
  39.         }
  40. }

  41. class MapPromote
  42. {
  43.         public static void main(String[] args)
  44.         {
  45.                 //创建学校
  46.                 HashMap<SomeClass,List<Student>> hp = new HashMap<SomeClass,List<Student>>();

  47.                 List<Student> class1 = new ArrayList<Student>();//创建班级:一班,班级中的集合元素为学生
  48.                 class1.add(new Student("001","lisi01"));//往一班添加学生
  49.                 class1.add(new Student("002","lisi02"));
  50.                 class1.add(new Student("003","lisi03"));
  51.                 class1.add(new Student("004","lisi04"));

  52.                 hp.put(new SomeClass("6班"),class1);

  53.                 List<Student> class2 = new ArrayList<Student>();//创建班级:二班
  54.                 class2.add(new Student("005","wangwu05"));//往二班添加学生
  55.                 class2.add(new Student("006","wangwu06"));
  56.                 class2.add(new Student("007","wangwu07"));
  57.                 class2.add(new Student("008","wangwu08"));

  58.                 hp.put(new SomeClass("1班"),class2);

  59.                 Iterator<SomeClass> it = hp.keySet().iterator();//创建迭代器,遍历各班级
  60.                 while(it.hasNext())
  61.                 {
  62.                         SomeClass myclass = it.next();
  63.                         List<Student> stu = hp.get(myclass);//获得各班级的集合(即所有学生信息)

  64.                         Iterator<Student> iter = stu.iterator();//创建班级集合的迭代器
  65.                         //List集合直接使用iterator(),不含keySet()方法,无需进行集合转换

  66.                         while(iter.hasNext())
  67.                         {
  68.                                 Student st = iter.next();//获取学生对象
  69.                                 String id = st.getId();//获取学生学号
  70.                                 String name = st.getName();//获取学生姓名
  71.                                 System.out.println("班级:"+myclass.getName()+"--学号:"+id+"--姓名:"+name);//输出结果
  72.                         }
  73.                 }
  74.         }
  75. }
复制代码

作者: 黄玉昆    时间: 2013-4-9 08:09
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2