map
Map储存的是键和值,成对存在的,常用的有hashmap和treemap
最基本的操作是put(k,v);
就是添加,值得注意的是,map中键的值不可重复,值得值随意,所以如果将相同的值的键值对put进去则相当于更新操作。
查看指定的键或者值是否存在有相应的containKey()/containValue()
方法
删除使用的是remove()
方法,而参数则传入给一个key,另外也可以使用putall();
插入一组数据。
Treemap除了实现不一样,tree还可以实现排序,和treeset一样,有两种方法,实现comparable接口或者comparator接口,一个是自然排序,一个是定义排序。
然后就是对map的遍历,总共有4种方法分别如下:
//第一种:普遍使用,二次取值
System.out.println("通过Map.keySet遍历key和value:");
for (String key : map.keySet()) {
System.out.println("key= "+ key + " and value= " + map.get(key));
}
第一种方法是通过keyset方法返回了一个包含了所有key值的set,然后通过对这个set的遍历,使用get()
方法将值获得。
//第二种
System.out.println("通过Map.entrySet使用iterator遍历key和value:");
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
第二种方法使用的是Map.entrySet()
方法,这个方法获得的返回值为Set<Map.Entry<K,V>>
,
返回此映射所包含的映射关系的 Set 视图。
然后使用返回这个set的迭代器来遍历set,这个entry包含了映射关系,然后使用它的getkey和getvalue方法得到数据。
//第三种:推荐,尤其是容量大时
System.out.println("通过Map.entrySet遍历key和value");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
第三种方法同样使用了entry方法不过遍历set使用的是增强for循环,似乎效率会高一点,有待研究。
//第四种
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {
System.out.println("value= " + v);
}
第四种使用的是map的values方法,这个方法会返回values值的一个集合Collection,然后使用增强for循环遍历,缺点则为上边所说的,只能遍历value,对于key则完全不知。
然后就是
I/O
io就是文件的输入输出,一般在网络编程中常用。
这里重要的一个类就是File类
也就是文件类,对文件的操作,都是通过这个类来实现的,下面就是一些基本的操作。
首先来看File的构造函数:
File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(URI uri)
通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例
- 另外还定义了一些静态的字符串,供使用
static String pathSeparator
与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static char pathSeparatorChar
与系统有关的路径分隔符。
static String separator
与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static char separatorChar
与系统有关的默认名称分隔符。
比较常用的是separator
,从安全上来讲不建议直接用/来当作分隔符,而且你在使用的时候还需要加一个/来转义,像这样
File f=new File("meng\\JAVAEE"\\msg.txt");
所以一般来讲我们这样做
File f=new File("meng"+File.separator+"JAVAEE"+File.separator+"msg.txt");
在前面不加盘符的话,默认会在程序的路径下。
另外jdk中提到
File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。
查看文件的相对路径
File.getPath();
查看文件的绝对路径
file.getAbsolutefile
或者
File.getAbsolutepath
两者的返回值不同,一个返回的为file对象,另一个为路径的string
另外可以得到文件的父目录
Getparent()
GetparentFile()
是否可读file.canread();
是否可写file.canWrite();
可以通过file.exists()
判断目录是否存在,然后通过mkdir()
创建,或者mkdirs()
区别在于后者可以同时创建所有不存在的父类文件夹,而前者只能创建一个。
重命名使用的是renameTo()
重点是,我们可以通过这个函数来实现文件的移动。将新的位置传给他即可。
另外List开头的几个方法可以获得目录下的所有文件,分别有几种形式,列举如下
String[] list()
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter)
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles()
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
File[] listFiles(FileFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter)
返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
static File[] listRoots()
列出可用的文件系统根。