A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

List和Hashtable都是可以存储数据的,List和Hashtable一个不就够了吗?

1 个回复

倒序浏览
首先,Hashtable是线程安全的,所以除非您对数据存取的安全性有要求,否则,就使用HashMap类即可。
然后,List顾名思义,是一个列表,而列表只能存储一串数据。 但是Map接口却可以存储多串数据。
看看如下代码:[code=java]package org.cxy.util;
import java.util.*;
public class ListMap {
        public static void main(String[] args) throws Exception {
                // 只能不断的将数据线性增加到list中。
                List<Student> list = new ArrayList<Student>();
                Map<String,Object> map = new HashMap<String,Object>();
                List<Student> list2 = new ArrayList<Student>();
                List<String> list3 = new ArrayList<String>();
                map.put("Person Is list", list2);
                map.put("String Is list", list3);
                map.put("currentTime", new Date());
        }
}[/code]也许您会不以为然,在刚开始学习Java时,看不出Map的好处是很正常的(当初我和您一样也有这个疑问),您越往后学,越能知道,很多以前认为没用的、冗余的技术其实都是很有用处的。

下面咱们来个操作数据库的例子:
问题描述: 现在要修改数据库中的某个一个学生的信息。 学生的字段包括: 所在院系、姓名、编号。且任务的要求就是要修改学生的这三个字段。
院系类:[code=java]package org.cxy.util;

public class Dept {
        private String deptno;        // 院系的编号。
        private String dname;        // 院系的名称。
        public String getDeptno() {
                return deptno;
        }
        public void setDeptno(String deptno) {
                this.deptno = deptno;
        }
        public String getDname() {
                return dname;
        }
        public void setDname(String dname) {
                this.dname = dname;
        }
}[/code]学生类代码:[code=java]package org.cxy.util;

public class Student {
        private String sid;        // 学生编号。
        private String name;        // 学生姓名。
        private Dept dept;                // 学生所在院系。
        public String getSid() {
                return sid;
        }
        public void setSid(String sid) {
                this.sid = sid;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public Dept getDept() {
                return dept;
        }
        public void setDept(Dept dept) {
                this.dept = dept;
        }
}[/code]既然要修改学生所在的基本信息和院系,那么需要些什么数据?
|-  第一,从数据库中的院系表中,查询出所有的院系,以供用户选择。
|-  第二,从数据库中的学生表中,查询出该学生的基本信息,即学号、姓名。

    这很显然,这个操作有两个返回值,一个是List<Dept>,另一个是Student类型的数据。但是咱们都知道,方法只能返回一个值,虽然方法体中可以有多个return语句,但是最终执行的,只会是其中的一个return,且返回的仍然只有一个值。那么,现在怎么办?
    若是以前,没办法,写两个方法吧,一个用来返回List<Dept> 一个用来返回Student 。当然,解决问题的方法不止这一种,您也可以通过利用“传引用调用”的特点,解决这个问题。但是,这都太麻烦了。
    此时Map就出场了。咱们写一段伪代码来看看。[code=java]   public Map<String,Object> studentUpdatepre(String sid){
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("allDept", deptDAO.findAll());
        map.put("student",stuDAO.findById(sid));
        return map;
   }[/code]代码解释:
   |-  deptDAO.findAll() 方法,用来从数据库中查询出所有的Dept 。
   |-  stuDAO.findById() 方法,指定一个学生的学号,从数据库中查询出一个Student 。
   然后,咱们将这两个数据,都放在一个Map对象中,并使用String作为Map的key,这样就可以方便的在一个方法中返回多个值。

   也就是说,我刚刚说的就是,使用Map可以让方法返回多个值,而且此种写法,可是减少数据库的开关次数。 也许您暂时体会不到,但是记住一句话就可以,“万物都有其存在的必然性,也许咱们暂时用不到那些技术,但是他的优点是毋庸置疑的。”
   等您的Java技术更进一步的时候,就会慢慢体会了。总之Map很好用就是了。

                                                                 黑马程序员手打 -- 转载请注明。
[ 本帖最后由 cxy_zy 于 2011-07-14  17:28 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 只能给1分+1分辛苦分

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马