List接口的实现类
- List特点:有序、不唯一(可重复)
- ArrayList实现了长度可变的数组,在内存中分配连续的空间.
-优点:便利元素和随机访问元素的效率比较高
-缺点:添加和删除需要大量移动元素,效率低,按照内容查询效率低 - LinkedList采用链表存储方式
-优点:插入、删除元素时效率比较高
-缺点:便利和随机访问元素效率低下
public class LinkedListDemo{
public static void main(String[] args){
LinkedList linkedList = new LinkedList();
linkedList.add(123);
System.out.println(linkedList)
}
}
LinkedList拥有更加丰富的方法,需要用的时候再查询api即可,不用记忆
Vector
- Vector也是List接口的一个子类实现
- Vector跟ArrayList一样,底层都是使用数组进行实现的
- 面试经常问区别:
(1)ArrayList是线程不安全的,效率高,Vector是线程安全的效率低
(2)ArrayList在进行扩容的时候,是扩容1.5倍,Vector扩容的时候是扩容原来的2倍
Iterator接口
- 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象
- Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作.
- Iterator接口定义了如下方法:
blloean hasNext(); //判断是否有元素没有被遍历
Object next(); //返回游标当前位置的元素并将游标移动到下一个位置
void remove();//操作只能执行一次 - 在java代码中,包含了三种循环方式:
do…while
while
for
还有一种增强for循环,可以简化循环的编写(使用比较多)
Iterator iterator = list.iterator();
while(iterator.hasNext()){
......
}
- 所有的集合类都默认实现了Iterator接口,实现此接口意味着具备了增强for循环的能力,也就是for each
增强for循环本质上使用的也是iterator的功能
方法:
iterator()
foreach() - 在iterator的方法中,要求返回一个Iterator的接口子类实例对象,此接口中包含了:
hasNext()
next() - 在使用Iterator进行迭代的过程中,如果删除某个元素会报错,并发操作异常,因此如果遍历的同时需要修改元素,建议使用ListIterator()
- ListIterator迭代器提供了向前和想活向后两种遍历方式
当使用向前遍历的时候,必须要保证指针在迭代器的结尾,否则无法获取结果值
//想做边遍历边删除操作时,需要使用ListIterator
ListIterator iterator = list.listIterator();
while(iterator.hasNext()){
Object o = iterator.next();
if(o.equals(1)){
iterator.remove();
}
}
Set接口中的实现类
- Set接口存储一组唯一,无序的对象
- (存入和取出的顺序不一定一致)
- 操作数据的方法和List类似(不存在get方法)
- HashSet:采用HashTable哈希表结构
-优点:添加熟读快,查询速度快,删除速度快
-缺点:无序
-LinkedHashSet
采用哈希表存储结构,同时使用链表维护次序
有序(添加顺序) - TreeSet
-采用二叉树(红黑树)的存储结构
-优点:有序(排序后的升序)查询速度比List快
-缺点:查询速度没有HashSet快
Iterator iterator = set.iterator();
while(iterator.hasNext()){
......
}
//推荐第二种,循环方式,因为上面定义的iterator作用域在整个程序而下面的只作用在一个循环,在不使用时不会造成资源的浪费
for(Iterator iter = set.iterator();iter.hasNext();){
......
}