首先,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 编辑 ] |