JAVA学习——容器(概述)
容器是用来存储对象的工具,容器不可以存储基本类型,因为基本类型保存在栈中随时都可能被清除。
数组与集合的不同:1、数组虽然可以存储对象但是其中的对象必须是属于同一类型的,而容器是可以包含不同的对象类型的。2、数组是固定长度的,其长度在定义时就已经固定不可以改变,容器的大小是可动态改变的。3、数组可以存储基本类型而容器只可以存储对象。
容器家族图谱如下:
之所以会有如此多的容器,是因为每一种容器对对象进行存储时采用的数据结构不同。其实集合和数组一样存储的都是元素的地址,而不是元素实体。容器中的元素可以直接使用print()方法打印出来。容器一般都包含增、删、改、查等操作。
下面是容器类的公共方法:
boolean | |
boolean | addAll(Collection<? extendsE> c) |
void | clear() |
boolean | |
boolean | containsAll(Collection<?> c) |
boolean | |
int | hashCode() |
boolean | isEmpty() |
iterator() | |
boolean | remove(Object o) |
boolean | RemoveAll(Collection<?> c) |
boolean | retainAll(Collection<?> c) |
int | size() |
Object[] | toArray() |
toArray(T[] a) |
<T> T[] |
此处重点说一下iterator(),Java 的Iterator,它只能用来:
1)使用方法 iterator()要求容器返回一个 Iterator。第一次调用Iterator 的next()方法时,它返回序列的第一个元素。
2)使用next()获得序列中的下一个元素。
3)使用hasNext()检查序列中是否还有元素。
4)使用remove()将上一次返回的元素从迭代器中移除。
在JAVA容器中有一个特殊的迭代器listIterator,该迭代器只能用于list类的访问。该迭代器所包含的主要方法是:
1、next()得到下一个元素;previous()得到前一个元素。
2、nextIndex()得到下一个元素的索引号;previousIndex()得到前一个元素的索引号。
3、hasNext()判断是否还有后继元素;hasPrevious()判断是否还有前驱元素。
4、listIterator()得到该集合的迭代器;listIterator(n)得到一个子迭代器,从原集合中第n+1个元素起(注意考虑第一个元素索引号为0)至集合末尾的所有元素组成一个子迭代器。
5、set(“newElement”)将当前元素替换为newElement。这个方法的调用类似remove()方法,需要先调用next()方法。
在使用迭代器的同时不可以使用容器自身的方法对容器中的元素进行修改,否则会发生ConcurrentModificationException异常。