提供iterator方法,这个方法返回迭代器(iterator)。
迭代器是java为Collection集合容器类提供的一个统一的遍历方式。其中foreach循环就是利用iterator方法来实现的
1.方法hasNext()判断后面是否还有数据
2.方法next()获取后面的一个数据
后面,是由于我们的迭代器不是指向数据的,而是指向数据的前面。每次需要判断后面是否有数据。。。。。,有则调用next()方法移动到下一个数据之前,并将移动中罗国的这个数据源返回
3.执行完毕后,iteror到头了,这个迭代器工作已经完成了,想要再次遍历,必须再创建迭代器
4.方法remove()删除刚刚通过next返回那个数据。
我们使用的这些数据容器,在遍历时,不可以删除其中的数据,如果删除将会有运行时异常抛出
父类:AbstractMap
父接口:Serializable, Cloneable, Map
HashMap()
初始容量:
加载因子:加载因子表示数据量与数组大小的比例,超出后,会扩展数组,这样让我们的数据容器保持一个稳定的效率。
我们可以通过调节加载因子,控制HashMap的效率偏向。
1.增添
put(K,V):添加键值对到HashMap中存储。
2.删除
remove(K):删除指定键的值。
3.修改
put(K,V)将指定数据,与已存在的某个键关联起来。
4.查找
get(K)通过指定的键,来获取与之关联的数据值。
HashMap通过这4类方法,形成了构建一个数据结构,组织数据的功能。
- 介于数组与链表之间。
- 如果我们所有节点都存储于数组中那么效率接近数组。
- 如果所有节点都在同一个链表上,那么效率接近链表。
1.HashMap的键是唯一的。
2.HashMap没有提供直接的遍历方法,我们需要通过keySet方法获取所有键,再用键取出对应数据值
3.如果ArrayList通过index来存取数据,HashMap通过键来作为存取数据的标志。
数组—链表(java8后是树)
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.判断地址是否相等。
2.判断比较的类型是否一致。
3.判断字符长度是否一致。
4.判断每个字符是否一致。
当然所有对象都有比较相等的需求,但是不是所有都有比较大小的需求,所以大小的比较并不在Object类型中设定,而是通过一个Comparable接口进行规范,需要比较大小的类型,去实现此接口即可。
两个比较的对象逻辑相等返回0;
前一个对象比后一个对象大,返回正数。
前一个对象比后一个对象小,返回负数。
如果我们想要不按照某些类型的compareTo方法的比较方式比较大小,或者有些类型都没有比较功能,我们依然想要对他们进行比较,甚至排序,那么我们需要临时设置一个比较器,
比较他们的大小:Comparetor,实现它的compare方法。
Set extends Collection
内部使用一个HashMap来装载数据,不过利用了HashMap键不能相等的特点,完成了HashSet内容数据的唯一性保证。
java的数据容器类,都是Collection或者Map的子类。遍历使用iterator。
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.我们还可以添加过滤器,控制方法返回的文件。
一串有序的字节序列。
InputStream关键方法:
close() read()
OutputStream关键方法:
close() flush() write()
FileInputStream
作用:将数据从文件读取到程序中来。
构造器:依赖文件创建
FileInputStream对象方法:
close() read()
FileOutputStream
作用:将数据从程序中,输出到文件中。
构造器:依赖文件创建FileOutputStream,并且有一个状态值:append。
方法:close() flush() write()
注意:
1.append 如果要覆盖原文件中的内容填false,或者不填。
2.每次写操作执行完毕,都要调用flush()。