集合中存储的都是对象的引用(地址值)。
集合中元素的遍历方式:
Interator it = al.iterator();
while(it.hasNext()){
sop(it.next());
}
List:元素是有序的(存入和取出的顺序一致。),元素可以重复。因为该集合体系有索
引。
List集合特有的迭代器。ListIterator时Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生
ConcurrentModificationException异常。所以,在迭代器时,只能用迭代器的方法操作
元素,可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作。如果想要
其他的操作如添加,修改等,就需要使用其子接口ListIterator。该接口只能通过List集
合的listIterator方法获取。
ListIterator li = al.listIterator()
while(li.hasNext()){
li.next();
}
List - ArrayList:底层的数据结构使用的是数组结构。线程不同步。
默认长度是10,当超过后按照重新创建长度增加50%的数组,并复制原
数据和新数据。
- LinkedList:底层使用的链表数据结构。
- Vector:底层是数组数据结构。线程同步。(被ArrayList替代,速度慢)
默认长度是10,当超过后按照100%的方式创建,并复制。
枚举是Vector特有的取出方式。
List集合判断元素是否相同,依据的是元素的equals方法。
Set:元素是无序的(存入和取出的顺序不一定一致。),元素不可以重复。
Set - HashSet:底层数据结构是哈希表。
每次添加新元素时,要比较哈希表里的哈希值是否有相同(也就是调用
hashCode()方法),在哈希表中值重复的时候,判断元素对象是否相同(也就是调用
equals()方法),如果不相同,那么在同一个地址上顺延,标示为两个不同的对象。
Set - TreeSet:底层数据结构是二叉树。可以Set集合中的元素进行排序。
保证元素唯一性的依据就是comparaTo方法的return 0;
TreeSet排序方式一:让元素具备比较性需要实现Comparable接口,覆盖public
int comparaTo(Object obj)方法。
TreeSet排序方式二:当元素自身不具备比较性时,或者具备的比较性不是所需
要的,这是需要让集合自身具备比较性。定义了比较器,将比较器对象作为参数传递给
TreeSet集合的构造函数。定义比较器,实现Comparator接口,覆盖public int compara
(Object o1,Object o2)方法。
当两种排序都存在时,以比较器为主。
排序时,当主要条件相同时,一定要判读一下次要条件。否则会导致添加不相同元素失败
。
|
|