资源预览内容
第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
第9页 / 共23页
第10页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
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 的类型没有严格要求,只要是引用类型均可。但是为了保证在使用时不会造成数据混乱,通常我们会使用泛型去约束 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 方法我们学会了如何向 Map 中存入数据,那么我们再来看看如何获取数据。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(这里检查是否包含是根据 key 的 equals 比较结果为依据的。)则返回 true。1.2. HashMap1.2.1. hash 表原理HashMap 是 Map 的一个常用的子类实现。其实使用散列算法实现的。HashMap 内部维护着一个散列数组(就是一个存放元素的数组),我们称其为散列桶,而当我们向 HashMap 中存入一组键值对 时, HashMap 首先获取 key 这个对象的 hashcode()方法的返回值,然后使用该值进行一个散列算法,得出一个数字,这个数字就是这组键值对要 存入散列数组中的下标位置。那么得知了下标位置后,HashMap 还会查看散列数组当前位置是否包含该元素。(这里要注意的是,散列数组中每个元素并非是直接存储键值对 的,而是存入了一个链表,这个链表中的每个节点才是真实保存这组键值对的。)检查是否包含该元素时根据当前要存入的 key 在当前散列数组对应位置中的链表 里是否已经包含这个 key,若不包含则将这组键值对存入链表,否则就替换 value。那么在获取元素时,HashMap 同样先根据 key 的 hashcode 值进行散列算法,找到它在散列数组中的位置,然后遍历该位置的链表,找到该 key 所对应的 value之后返回。看到这里可能有个疑问,链表中应该只能存入一个元素,那么 HashMap 是如何将 key-value 存入链表的某个节点的呢?实际上,HashMap 会将每组键值对封装为一个 Entry 的实例,然后将该实例存入链表。1.2.2. hashcode 方法HashMap 的存取是依赖于 key 的 hashcode 方法的返回值的,而 hashcode 方法实际上是在 Object 中定义的。其定义如下:1. int hashCode()重写一个类的 hashcode()方法有以下注意事项 :1、若一个类重写了 equals 方法,那么就应当重写 hashcode()方法。2、若两个对象的 equals 方法比较为 true,那么它们应当具有相同的 hashcode 值。3、对于同一个对象而言,在内容没有发生改变的情况下,多次调用 hashCode()方法应当总是返回相同的值。4、对于两个对象 equals 比较为 false 的,并不要求其 hashcode 值一定不同,但是应尽量保证不同,这样可以提高散列表性能。1.2.3. 装载因子及 HashMap 优化在散列表中有一下名词需要了解: Capacity:容量, hash 表里 bucket(桶) 的数量, 也就是散列数组大小. Initial capacity:初始容量, 创建 hash 表的时 初始 bucket 的数量, 默认构建容量是16. 也可以使用特定容量. Size : 大小, 当前散列表中存储数据的数量. Load factor:加载因子, 默认值 0.75(就是 75%), 当向散列表增加数据时如果 size/capacity 的值大于 Load factor 则发生扩容并且重新散列(rehash). 那么当加载因子较小时候散列查找性能会提高, 同时也浪费了散列桶空间容量. 0.75 是性能和空间相对平衡结果. 在创建散列表时候指定合理容量, 从而可以减少 rehash 提高性能。1.3. 有序 Map1.3.1. LinkedHashMap 实现有序的 MapMap 接口的哈希表和链表实现,具有可预知的迭代顺序。此实现与 HashMap 的不同之处在于,LinkedHashMap 维护着一个双向循环链表。此链表定义了迭代顺序,该迭代顺序通常就是将存放元素的顺序。需要注意的是,如果在 Map 中重新存入以有的 key,那么 key 的位置会不会发生改变,只是将 value 值替换。2. 文件操作File2.1. 创建 File 对象java.io.File 用于表示文件(目录),也就是说程序员可以通过 File 类在程序中操作硬盘上的文件和目录。File 类只用于表示文件(目录)的信息(名称、大小等),换句话说只能访问文件或目录的相关属性,不能对文件的内容进行访问。2.1.1. File(pathname)File 提供了较多的构造方法来创建实例,其中之一就是:1. File(String pathname)通过将给定路径名字符串转换成抽象路径名来创建一个新 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()该方法若返回 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 的 createNewFile 方法用于当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。 其方法定义:1. boolean createNewFile()返回值:如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,则返回 false 。2.2.4. delete 方法File 的 delete 方法用于删除此抽象路径名表示的文件或目录。 其方法定义:1. boolean delete()返回值:当且仅当成功删除文件或目录时,返回 true;否则返回 false。需要注意的是,若次 File 对象所表示的是一个目录时,在删除时需要保证此为空目录才可以成功删除(目录中不能含有任何子项)。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 方法用于创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。其方法定义:1. boolean mkdirs()返回值:当且仅当已创建目录以及所有必需的父目录时,返回 true;否则返回 false2.3.3. delete 方法2.2.5 节中我们介绍了 File 的 delete 方法是用于删除此抽象路径名表示的文件或目录。在此在此强调,在删除目录时要特别注意:需要保证此为空目录才可以成功删除(目录中不能含有任何子项)。2.3.4. listFiles 方法File 的 listFiles 方法用于返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。其方法定义:1. File listFiles() 返回值:抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。如果目录为空,那么数组也将为空。如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。2.3.5. FileFilter 接口通过 listFiles 方法我们可以获取一个目录下的所有子项,但有些时候我们并不希望获取全部子项,而是想获取部分满足我们实际需求的子项时,我们可以使用 File 的重载方法:1. File listFiles(FileFilter filter)这里我们看到,该重载方法 要求我们传入一个参数,其类型是 FileFilter。什么是 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 方法返回
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号