Java?指针?哪里来的指针???
今天在学习集合分支List
的特有迭代器ListIterator
时遇到两个疑惑,这是第二个,第一个问题点击传送,建议先看看第一个再来这探讨第二个问题哈哈哈
由于前面讲过,这里就只引入我们要讨论的主角void add()
和E next()
void add():将指定元素插入列表 E next():返回迭代中的下一个元素
在这里主要注意的是,此add
非彼add
,什么意思呢?就是说前面我们用List
对象调用的add()
方法和我们今天的主角ListIterator
中的add()
方法效果是不一样的,需要我们注意区分
在第一个问题中,我们提到过“指针”这个玩意,你可能会好奇,“Java中不是没有指针这玩意么?”,Java中并没有显示的使用指针,而且也不允许编程的过程中使用指针,但实际上,一个对象的访问就是通过指针来实现的,一个对象会从实际的存储空间的某个位置开始占据一定的存储体,通俗来说也就是我们第一个问题中“指针”一开始的默认位置,所以Java不是没有指针,而是对指针进行了伪装:使用上泛化、强化和简单化,概念上淡化和弱化,如果一定要在是或否里选择一个,OK,Java中没有指针
先来看看我们一般通过list
对象调用的add()
方法
import java.util.ArrayList;
import java.util.List;
public class Test_2 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add("Java");
System.out.println(list);
}
}
接着看看我们通过lit
对象调用的add()
方法
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Test_2 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add("Java");
ListIterator<String> lit = list.listIterator();
lit.add("1");
lit.add("2");
lit.add("3");
System.out.println(list);
}
}
看过上面两个你可能觉得离谱了,心里会问“这是为什么呢?”,别急,还有更离谱的,我们配合next()
方法再来看看
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Test_2 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add("Java");
ListIterator<String> lit = list.listIterator();
lit.add("1");
lit.add("2");
lit.add("3");
lit.next();
lit.add("4");
lit.add("5");
System.out.println(list);
}
}
看到这,想必大家都目瞪口呆,心中默念着“为什么呀?!为什么呀?!”了吧哈哈哈!我的第一反应也是这样,不过不急,且听我慢慢道来
还记得我们在第一个问题里的“指针”么?这里也是这个思路,这里我通过动图的方式为大家展示每一个挖掘出来的问题
集合索引从 0 开始 由上往下
通过动画我们可以知道,ListIterator
中的add()
方法的“指针”和List
中的add()
方法的“指针”在位置上是不通用的,是相互独立的,而两者都会在原“指针”位置完成添加元素的操作后将“指针”向下移动,因此也解释了在第一个问题中ListIterator
中的hasPrevious()
方法的返回值为什么是false
了,因为“指针”在默认的开头位置,向上检测不到有元素的存在
看到这里,想必大家都理解了吧~不理解我也没办法了哈哈哈哈!!!多看几遍吧!
解决问题?不存在的~本篇是理解向的,解决啥?先解决一下脑瓜子嗡嗡响的问题吧哈哈哈!!!
以上这都是本人在学习过程中结合各方面资料的一些思考得出的结论,谈不上谨慎,仅供参考,如有错误往各位大佬指出,好了,看了这么多~今天你学废了吗哈哈哈!
本篇文章采用 署名 4.0 国际 (CC BY 4.0) 许可协议进行许可。