java集合框架(ArrayList、LinkedList等)

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();){
......
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值