Java核心

上传人:豆浆 文档编号:2664005 上传时间:2017-07-26 格式:DOC 页数:23 大小:130.29KB
返回 下载 相关 举报
Java核心_第1页
第1页 / 共23页
Java核心_第2页
第2页 / 共23页
Java核心_第3页
第3页 / 共23页
Java核心_第4页
第4页 / 共23页
Java核心_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《Java核心》由会员分享,可在线阅读,更多相关《Java核心(23页珍藏版)》请在金锄头文库上搜索。

1、Java 核心(API )1. 查询表 2. 文件操作File 1. 查询表1.1. Map 接口1.1.1. Map 接口java 提供了一组可以以键值对(key-value) 的形式存储数据的数据结构,这种数据结构成为 Map。我们可以把 Map 看成一个多行两列的表格,其中第一列存放key,第二列存放 value。而每一行就相当于一组 key-value 对,表示一组数据。Map 对存入的元素有一个要求,就是 key 不能重复,所谓不能重复指的是在Map 中不能包含两个 equals 为 true 的 key。Map 对于 key,value 的类型没有严格要求,只要是引用类型均可。但是

2、为了保证在使用时不会造成数据混乱,通常我们会使用泛型去约束 key 与 value 的类型。1.1.2. put 方法既然我们知道了 Map 在保存数据时实际上是存入了两部分信息的 ,key 与value。那么我们来看看如何向 Map 中存入数据。Map 提供了一个方法:1. V put(K k,V v)该方法的作用是将 key-value 对存入 Map 中,因为 Map 中不允许出现重复的key,所以若当次存入的 key 已经在 Map 中存在,则是替换 value 操作,而返回值则为被替换的元素。若次 key 不存在,那么返回值为 null。1.1.3. get 方法我们学会了如何向 M

3、ap 中存入数据,那么我们再来看看如何获取数据。Map 中获取数据的方式是给定 Key 获取对应的 Value。Map 提供了一个方法:1. V get(Object key)该方法的作用就是根据给定的 key 去查找 Map 中对应的 value 并返回,若当前Map 中不包含给定的 key,那么返回值为 null。1.1.4. containsKey 方法Map 中的 containsKey 方法用于检测当前 Map 中是否包含给定的 key。其方法定义如下:1. boolean containsKey(Object key)若当前 Map 中包含给定的 key(这里检查是否包含是根据 k

4、ey 的 equals 比较结果为依据的。)则返回 true。1.2. HashMap1.2.1. hash 表原理HashMap 是 Map 的一个常用的子类实现。其实使用散列算法实现的。HashMap 内部维护着一个散列数组(就是一个存放元素的数组),我们称其为散列桶,而当我们向 HashMap 中存入一组键值对 时, HashMap 首先获取 key 这个对象的 hashcode()方法的返回值,然后使用该值进行一个散列算法,得出一个数字,这个数字就是这组键值对要 存入散列数组中的下标位置。那么得知了下标位置后,HashMap 还会查看散列数组当前位置是否包含该元素。(这里要注意的是,散

5、列数组中每个元素并非是直接存储键值对 的,而是存入了一个链表,这个链表中的每个节点才是真实保存这组键值对的。)检查是否包含该元素时根据当前要存入的 key 在当前散列数组对应位置中的链表 里是否已经包含这个 key,若不包含则将这组键值对存入链表,否则就替换 value。那么在获取元素时,HashMap 同样先根据 key 的 hashcode 值进行散列算法,找到它在散列数组中的位置,然后遍历该位置的链表,找到该 key 所对应的 value之后返回。看到这里可能有个疑问,链表中应该只能存入一个元素,那么 HashMap 是如何将 key-value 存入链表的某个节点的呢?实际上,Hash

6、Map 会将每组键值对封装为一个 Entry 的实例,然后将该实例存入链表。1.2.2. hashcode 方法HashMap 的存取是依赖于 key 的 hashcode 方法的返回值的,而 hashcode 方法实际上是在 Object 中定义的。其定义如下:1. int hashCode()重写一个类的 hashcode()方法有以下注意事项 :1、若一个类重写了 equals 方法,那么就应当重写 hashcode()方法。2、若两个对象的 equals 方法比较为 true,那么它们应当具有相同的 hashcode 值。3、对于同一个对象而言,在内容没有发生改变的情况下,多次调用 h

7、ashCode()方法应当总是返回相同的值。4、对于两个对象 equals 比较为 false 的,并不要求其 hashcode 值一定不同,但是应尽量保证不同,这样可以提高散列表性能。1.2.3. 装载因子及 HashMap 优化在散列表中有一下名词需要了解: Capacity:容量, hash 表里 bucket(桶) 的数量, 也就是散列数组大小. Initial capacity:初始容量, 创建 hash 表的时 初始 bucket 的数量, 默认构建容量是16. 也可以使用特定容量. Size : 大小, 当前散列表中存储数据的数量. Load factor:加载因子, 默认值 0

8、.75(就是 75%), 当向散列表增加数据时如果 size/capacity 的值大于 Load factor 则发生扩容并且重新散列(rehash). 那么当加载因子较小时候散列查找性能会提高, 同时也浪费了散列桶空间容量. 0.75 是性能和空间相对平衡结果. 在创建散列表时候指定合理容量, 从而可以减少 rehash 提高性能。1.3. 有序 Map1.3.1. LinkedHashMap 实现有序的 MapMap 接口的哈希表和链表实现,具有可预知的迭代顺序。此实现与 HashMap 的不同之处在于,LinkedHashMap 维护着一个双向循环链表。此链表定义了迭代顺序,该迭代顺序

9、通常就是将存放元素的顺序。需要注意的是,如果在 Map 中重新存入以有的 key,那么 key 的位置会不会发生改变,只是将 value 值替换。2. 文件操作File2.1. 创建 File 对象java.io.File 用于表示文件(目录),也就是说程序员可以通过 File 类在程序中操作硬盘上的文件和目录。File 类只用于表示文件(目录)的信息(名称、大小等),换句话说只能访问文件或目录的相关属性,不能对文件的内容进行访问。2.1.1. File(pathname)File 提供了较多的构造方法来创建实例,其中之一就是:1. File(String pathname)通过将给定路径名字

10、符串转换成抽象路径名来创建一个新 File 实例提示:抽象路径应尽量使用相对路径,并且目录的层级分隔符不要直接写 ”/”或”,应使用 File.separator 这个常量表示,以避免不同系统带来的差异。2.1.2. File(parent,child)File 的另一个常用构造方法:1. File(File parent,String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。2.1.3. isFile() 方法File 的 isFile 方法用于判断当前 File 对象表示的是否为一个文件1. boolean isFile()该方法若

11、返回 true,这表示 File 表示的是一个文件。2.2. File 表示文件信息2.2.1. length 方法File 的 length 方法用于返回由此抽象路径名表示的文件的长度,其定义为:1. long length() 该方法返回的 long 值表示该文件所占用的字节量。2.2.2. exists 方法File 的 exists 方法用于测试此抽象路径名表示的文件或目录是否存在,其方法定义:1. boolean exists() 若该 File 表示的文件或目录存在则返回 true,否则返回 false。2.2.3. createNewFile 方法File 的 createNew

12、File 方法用于当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。 其方法定义:1. boolean createNewFile()返回值:如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,则返回 false 。2.2.4. delete 方法File 的 delete 方法用于删除此抽象路径名表示的文件或目录。 其方法定义:1. boolean delete()返回值:当且仅当成功删除文件或目录时,返回 true;否则返回 false。需要注意的是,若次 File 对象所表示的是一个目录时,在删除时需要保证此为空目录才

13、可以成功删除(目录中不能含有任何子项)。2.2.5. isDirectory()File 的 isDirectory 方法用于判断当前 File 对象表示的是否为一个目录1. boolean isDirectory()返回值:若 File 对象表示的是一个目录,则返回 true2.3. File 表示目录信息2.3.1. mkdir 方法File 的 mkdir 方法用于创建此抽象路径名指定的目录。其方法定义:1. boolean mkdir()返回值:当且仅当已创建目录时,返回 true;否则返回 false2.3.2. mkdirs 方法File 的 mkdirs 方法用于创建此抽象路径名

14、指定的目录,包括所有必需但不存在的父目录。注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。其方法定义:1. boolean mkdirs()返回值:当且仅当已创建目录以及所有必需的父目录时,返回 true;否则返回 false2.3.3. delete 方法2.2.5 节中我们介绍了 File 的 delete 方法是用于删除此抽象路径名表示的文件或目录。在此在此强调,在删除目录时要特别注意:需要保证此为空目录才可以成功删除(目录中不能含有任何子项)。2.3.4. listFiles 方法File 的 listFiles 方法用于返回一个抽象路径名数组,这些路径名表示此抽象路径名表

15、示的目录中的文件。其方法定义:1. File listFiles() 返回值:抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。如果目录为空,那么数组也将为空。如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。2.3.5. FileFilter 接口通过 listFiles 方法我们可以获取一个目录下的所有子项,但有些时候我们并不希望获取全部子项,而是想获取部分满足我们实际需求的子项时,我们可以使用 File 的重载方法:1. File listFiles(FileFilter filter)这里我们看到,该重载方法 要求我们传入一个参数,其类型是 Fi

16、leFilter。什么是 FileFilter 呢? FileFilter 是用于抽象路径名的过滤器,说白了就是定义一个规律规则,那么结合 listFiles 方法,我们就可以将满足此过滤规则的子项返回, 其他则忽略。FileFilter 是一个接口,所以当我们需要定义某种过滤规则时,我们可以定义一个类来实现这个接口,而此接口的实例可传递给 File 类的 listFiles(FileFilter) 方法。例如:1. File list = dir.listFiles(new FileFilter() 2. Override3. public boolean accept(File pathname) 4. return pathname.getName().startsWith(.);5. 6. ); 该方法的参数 FileFilter 实例的 accept 方法并进行过滤,listFiles 方法会将所有accept 方法返回

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号