黑马程序员技术交流社区

标题: 集合中的set [打印本页]

作者: 邝雄伟    时间: 2013-2-2 00:01
标题: 集合中的set
import java.util.*;
import java.io.*;
//需求:1.将指定目录下的java文件的绝对的路径名存入一个集合中。
    //2.再将集合中的文件目录取出存入一个指定的文件中。
public class Glc
{

public static void main(String[] args)throws IOException
{
  File fy = new File("D:\\Dem");
  List<File> list = new ArrayList<File>();
  di(fy,list);
  System.out.println(list.size());
  File f = new File(fy,"javalist.txt");
  xie(f.toString(),list);
  
  
  
}
public static void di(File fy,List<File> list)
{
  File[] fi = fy.listFiles();
  for(File fiu:fi)
  {
   if(fiu.isDirectory())
    di(fiu,list);
   else
   {
    if(fiu.getName().endsWith(".java"))
     list.add(fiu);
   }
  }
}
public static void xie(String javalist,List<File> list)throws IOException
{
  BufferedWriter buf = null;
  try
  {
   
   buf = new BufferedWriter(new FileWriter(javalist));
   
   for(File f:list)//为什么这个高级for循环用的循环条件是File对象????这个函数中传入的参数不是集合对象(List<File> list)吗.
                   //File对象不用从集合中取出就可以直接用吗???
   {
    String s = f.getAbsolutePath();
    buf.write(s);
    buf.newLine();
    buf.flush();
   
   
   }
  }
  catch(IOException e)
  {
   throw e;
  }
  finally
  {
   try
   {
    if(buf!= null)
     buf.close();
   }
   catch(IOException e)
   {
    throw e;
   }
  }
   
  
}

作者: 王勇文    时间: 2013-2-2 00:50
for(File f:list)//为什么这个高级for循环用的循环条件是File对象????这个函数中传入的参数不是集合对象(List<File> list)吗.
                   //File对象不用从集合中取出就可以直接用吗???
关于这个问题,我觉得首先你定义了泛型的接收参数
public static void xie(String javalist,List<File> list)throws IOException
<File>这个泛型类型。

泛型  有一个功能就是把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。

也就是 说你接收的参数类型有类型限制,这就是类型约束。          所以你的增强for循环的时候参数类型已经指定为File类了。


作者: 杨杨    时间: 2013-2-2 09:30
"为什么这个高级for循环用的循环条件是File对象????这个函数中传入的参数不是集合对象(List<File> list)吗."
File 是只里面的对象f的 类型 而不是集合对象 List <File>
作者: 胡发友    时间: 2013-2-2 11:05
1、首先你将文件的路径封装成File对象,再存储到list集合中,那现在list集合众的元素是什么类型呢?当然是File类型;
2、所以在for遍历的时候,类型是File,




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