这个世界是有序的,将Java对象零散地放到内存中是不符合世界常理的,特别是有一大组相似的甚至不知道有多少数据的时候。把Java对象装进盒子里可以有序收纳,这个盒子就叫容器。
泛型,就是泛泛而指的类型,就是不确定具体类型的类型。Java提供的容器,一般都支持泛型,也就是说不管是什么对象,都可以丢到容器中进行收纳。但在Java中,所有类都继承自Object,所以把对象当作Object对象丢到容器里不会有任何问题,但当拿出来这个Object的时候,由于不知道这个对象的真正类型是什么,就可能在向下转型的时候出现错误,为了避免这种情况,一般对容器使用<type>
表示容器的具体类型参数,也就是容器里放什么类就确定了,编译器就会对类型进行检查,避免运行时Object对象向下转型时错误的发生。例如:
List<Apple> apples = new ArrayList<Apple>();
你应当创建一个具体类的对象,将其转型为对应的接口,然后在其余的代码中都使用这个接口。
一个独立元素的序列,符合某种规则,提供迭代器,可以用foreach进行迭代遍历,也就是提供一个方法,可以每次从序列中从前到后依次拿到每一个元素。
成对的“键-值对”对象,可以用键来查找值。
在Map中,可以使用get()
方法通过key获取value的值;还可以使用方法检查一个k或者是v是否在map中;使用方法获取k或v的set。
具体方法不再赘述,用多了自然就会了,编程是一个纸上得来终觉浅的技术,真正的写代码才能熟练掌握。
但是容器的方法常见的有
add()
remove()
indexOf()
subList()
retainAll()
removeAll()
等,也就是增删改查方法......
容器内对象的比较使用的是equals()
。
迭代器是一个可以每次从容器中顺序抽取出一个对象进行遍历的工具,迭代器掩盖了遍历的底层实现,让遍历的操作与低层的实现相分离,遍历者只需要知道“从这个迭代器里可以不重复地从前到后拿到容器中的每一个元素”就好,而不用关心是从什么容器,和从容器中具体怎么拿的。
Iterator()
获取一个迭代器对象next()
方法获取下一个元素hasNext()
可以检查序列中是否还有元素迭代器可以搭配循环使用,还可以直接使用foreach循环。容器基于Collection,而Collection是继承Iterable接口的,是与iterator()方法绑定到一起的(参见Java文档)。
for(Obj o : ListA){
}
while(Obj.next()){
}
可以通过增加或者覆盖默认迭代器的方法,返回一个迭代器对象,实现自己的迭代器效果。
仅可以在List中使用的双向的迭代器
原文:https://www.cnblogs.com/CoveredWithDust/p/11935421.html