日期:2014-05-20  浏览次数:20938 次

探讨Vector和list的区别
探讨Vector和list的区别。
已经代码实现下面的功能。但是我想Vector和list的功能基本一致的
问是否可以把下面的vector换成list?


实例化Vector:
Vector vec=new Vector;
……
public Vector select()
 {
  DBConnection dbc=new DBConnection();//实例化连接数据库的类
  try
  {
  Connection conn=dbc.getConnection();//连接数据库
  sql="select fileId,issue,pdfName from pdffile order by issue desc";
  pres=conn.prepareStatement(sql);//操作数据库
  rs=pres.executeQuery();//查询出记录集
  while(rs.next())//看是否有下一条
  {
  PdfFile pdf=new PdfFile();
  pdf.setFileId(rs.getInt("fileId"));
  pdf.setIssue(rs.getInt("issue"));
  pdf.setPdfName(rs.getString("pdfName"));
  vec.add(pdf);//将得到的对象加到vec中
  }  
  }
  catch (Exception e)
  {
  e.printStackTrace();
  }
  finally{
  this.close(pres,rs);
  dbc.close();
  }
  return vec;//返回一个Vector集合
 }

然后在JSP页面上实例化这个DAO,调用个方法
  Vector vec=(Vector)request.getAttribute("result");
  if(vec==null||vec.size()==0)
  {
  %>
  <h3>暂无文件!</h3>
  </table>
  <%
  }
  else
  {
  //System.out.println("result is:"+ vec.size());
  String path=null;
  int size =vec.size();
  for(int j=(pageCount-1)*10;j<(pageCount-1)*10+pageRecordNum;j++)
  {
  if(j>=size)//数组越界
  {
  break;
  }
  PdfFile pdf =(PdfFile)vec.get(j); 
  int fileId=pdf.getFileId();
  //System.out.println("manage fileId:"+fileId);
  int issue =pdf.getIssue();
  String pdfName=pdf.getPdfName();
  String pathSimple=request.getRealPath("");//得到pdfmanage.jsp所在的目录 
  session.setAttribute("path",pathSimple+"/upload/pdf");
   
……
以上就是对Vector的完整操作,不过很多技术都会用到这个,我说的只是JSP+Servlet+DAO+Vo这种MVC模式中的情况.

------解决方案--------------------
Vector是线程安全的,ArrayList线程不安全。
在多线程环境下在老的JDK版本里推荐使用Vector.
在JDK新版里不再推荐使用Vector,原因是定义集合时可以定义成

ArrayList list = new ArrayList();
synchronized(list){

}

用synchronized在使用时决定是否同步化对象。
------解决方案--------------------
Vector vec = new Vector();
public Vector select(){...} // 既然已经返回Vector对象了,创建Vector对象
还是写在方法里面比较好一点吧。

另,Vector换成List应该不会有什么问题的
------解决方案--------------------
public List select()
{
DBConnection dbc=new DBConnection();//实例化连接数据库的类
try
{
Connection conn=dbc.getConnection();//连接数据库
sql="select fileId,issue,pdfName from pdffile order by issue desc";
pres=conn.prepareStatement(sql);//操作数据库
rs=pres.executeQuery();//查询出记录集
while(rs.next())//看是否有下一条
{
PdfFile pdf=new PdfFile();
pdf.setFileId(rs.getInt("fileId"));
pdf.setIssue(rs.getInt("issue"));
pdf.setPdfName(rs.getString("pdfName"));
list.add(pdf);//将得到的对象加到vec中

}
catch (Exception e)
{
e.printStackTrace();
}
finally{
this.close(pres,rs);
dbc.close();
}
return list;//返回一个Vector集合


一样的Vector(线程安全)和list(不是)
------解决方案--------------------