一、Iterator的API
关于Iterator主要有三个方法:hasNext()、next()、remove()
- hasNext:没有指针下移操作,只是判断是否存在下一个元素
- next:指针下移,返回该指针所指向的元素
- remove:删除当前指针所指向的元素,一般和next方法一起用,这时候的作用就是删除next方法返回的元素
二、迭代器原理
- 当创建完成指向某个集合或者容器的Iterator对象是,这是的指针其实指向的是第一个元素的上方,即指向一个空
- 当调用hasNext方法的时候,只是判断下一个元素的有无,并不移动指针
- 调用next方法的时候,向下移动指针,并且返回指针指向的元素,如果指针指向的内存中没有元素,会报异常。例如: 链表头部就是最久未使用的 key,int oldestKey = cache.keySet().iterator().next(); head指向的下一个结点就是就未使用的结点
- remove方法删除的元素是指针指向的元素。如果当前指针指向的内存中没有元素,那么会抛出异常。
特别注意这个方法:int oldestKey = cache.keySet().iterator().next();
LinkedHashMap<> map = new LinkedHashMap<>();
map.keySet().iterator().next返回的是链表头结点,即最久未使用节点,这个也是LRU设计的重要思路!