Java基础补习Day5

一、Iterable接口

1、作用:

提供iterator方法,这个方法返回迭代器(iterator)。

2、意义:

迭代器是java为Collection集合容器类提供的一个统一的遍历方式。其中foreach循环就是利用iterator方法来实现的

3、使用:

1.方法hasNext()判断后面是否还有数据
2.方法next()获取后面的一个数据
后面,是由于我们的迭代器不是指向数据的,而是指向数据的前面。每次需要判断后面是否有数据。。。。。,有则调用next()方法移动到下一个数据之前,并将移动中罗国的这个数据源返回
3.执行完毕后,iteror到头了,这个迭代器工作已经完成了,想要再次遍历,必须再创建迭代器
4.方法remove()删除刚刚通过next返回那个数据。

4、注意:

我们使用的这些数据容器,在遍历时,不可以删除其中的数据,如果删除将会有运行时异常抛出

二、HashMap:

继承关系:

父类:AbstractMap

父接口:Serializable, Cloneable, Map

构造器:

HashMap() 
初始容量:
加载因子:加载因子表示数据量与数组大小的比例,超出后,会扩展数组,这样让我们的数据容器保持一个稳定的效率。
我们可以通过调节加载因子,控制HashMap的效率偏向。

方法:

1.增添
    put(K,V):添加键值对到HashMap中存储。
2.删除
    remove(K):删除指定键的值。
3.修改
    put(K,V)将指定数据,与已存在的某个键关联起来。
4.查找
    get(K)通过指定的键,来获取与之关联的数据值。

HashMap通过这4类方法,形成了构建一个数据结构,组织数据的功能。

HashMap的效率:

  • 介于数组与链表之间。
  • 如果我们所有节点都存储于数组中那么效率接近数组。
  • 如果所有节点都在同一个链表上,那么效率接近链表。

注意:

1.HashMap的键是唯一的。
2.HashMap没有提供直接的遍历方法,我们需要通过keySet方法获取所有键,再用键取出对应数据值
3.如果ArrayList通过index来存取数据,HashMap通过键来作为存取数据的标志。

相关源码:

1.实现的数据结构:

数组—链表(java8后是树)

2.相关代码实现:

put()
1.判断KEY是否为null: key==null
1.1.KEY为空,取出table[0]中的链表A。
1.2.查看链表A中是否存在相同的key,存在则替换数据。
1.2如果不存在就新建一个节点,加在链表A的开头。并存入table[0]。
2.如果KEY不为null
2.1计算key的hash值,并与数组长度取模,得到存储的链表下标。
2.2查看链表中是否有这个key值。如果有就替换value值。 key.equals(key2)
2.3如果没有这个key,那么就新建节点存储键值对,并放在链表头部,存入数组。

补充:
HashMap键可以设置为null
hash算法,可以将不同长度的数据转换为等长的数据。

三、排序

1.判断相等:

  • ==: 用于判断地址是否一致
  • Object.equals():用于判断逻辑值是否相等(引用类型是要使用equals进行比较的)

逻辑相等的实现:

1.判断地址是否相等。

2.判断比较的类型是否一致。

3.判断字符长度是否一致。

4.判断每个字符是否一致。

当然所有对象都有比较相等的需求,但是不是所有都有比较大小的需求,所以大小的比较并不在Object类型中设定,而是通过一个Comparable接口进行规范,需要比较大小的类型,去实现此接口即可。

2.判断大小

compareTo方法规则:

两个比较的对象逻辑相等返回0;

前一个对象比后一个对象大,返回正数。

前一个对象比后一个对象小,返回负数。

如果我们想要不按照某些类型的compareTo方法的比较方式比较大小,或者有些类型都没有比较功能,我们依然想要对他们进行比较,甚至排序,那么我们需要临时设置一个比较器,
比较他们的大小:Comparetor,实现它的compare方法。

四、HashSet

1.继承关系:

    Set  extends Collection

2.实现原理:

    内部使用一个HashMap来装载数据,不过利用了HashMap键不能相等的特点,完成了HashSet内容数据的唯一性保证。

注意:

java的数据容器类,都是Collection或者Map的子类。遍历使用iterator。

五、IO

1.File

继承关系:

Object的子类
父接口:Serializable, Comparable

使用:

a.对文件进行操作:
    createNewFile() ;
    delete() ;
    exists() ;
    getAbsoluteFile() ;

注意:java是一种跨平台的语言,而各个平台的路径名分割符合路径分隔符又不一定相同,所以这两个符号请使用File.separator和File.pathSeparator来替代。

b.对文件夹进行操作:
    isFile()
    isDirectory()
    mkdir()/mkdirs()
    delete()
    list()

注意:

1.window中的路径名分割符石”\”但是java中这是用于设置转义字符的符号,要表示”\”需要转义:”\”。

2.删除目录依然使用delete方法,但是我们需要目录中的文件以及被删除。

3.mkdir()如果此目录的父路径不存在,则无法创建。

4.mkdirs()如果此目录的路径不存在,则连同父目录一同创建。

5.list()和listFiles()方法可以获取本目录的下一级文件(包括目录),而不是所有子文件。

6.我们还可以添加过滤器,控制方法返回的文件。

java流:

一串有序的字节序列。

1.基类:InputStream、OutputStream 字节流

InputStream关键方法:
    close()  read()
OutputStream关键方法:
    close() flush()  write()

2.文件输入输出流:

FileInputStream
    作用:将数据从文件读取到程序中来。
    构造器:依赖文件创建
    FileInputStream对象方法:
        close() read()

FileOutputStream
    作用:将数据从程序中,输出到文件中。
    构造器:依赖文件创建FileOutputStream,并且有一个状态值:append。
    方法:close() flush() write()

注意:
    1.append 如果要覆盖原文件中的内容填false,或者不填。
    2.每次写操作执行完毕,都要调用flush()。

你可能感兴趣的:(Java基础补习)