Collection接口和List

Collection 接口

  • 子接口list 和 Set
Collection<> c=new ArrayList<>()
  • 常用方法:
c.size //
c.isEmpty //判断是否为空
c.add("xxx");//添加元素
System.out.println(c);// [xxx]
c.remove("xxx");//移除对象
c.toArray();//转成Object数组
c.contains("xxx");//是否包含xxx元素
 iterator()
containsAll(Collection c);
addAll(Collection c);
removeAll(Collection c)//移除本容器和c容器中都包含的元素
retainAll(Collection c)  //保留本容器和C容器都包含的元素 其他元素删除

List:有序、可重复的容器 满足e1.equals(e2)的元素重复加入容器
常用的实现类:
ArrayList、 LinkedList、 Vector

  • ArrayList 底层是数组 查询效率高 增删效率低 线程不安全

  • LinkedList 底层链表 查询慢 增删快

  • Vector底层也是数组 但是线程安全

List方法

List list=new ArrayList()
list.add(1,"B");//指定索引添加元素
list.remove(1);//删除指定索引位置的元素
list.set(1,“B”);//修改指定索引位置的元素
list.get(1);获取指定索引位置的元素
list.indexOf(“A”)返回指定元素第一次出现的索引位置 如果不存在返回-1
list.lastIndexOf("A")返回指定元素最后一次出现的索引位置 如果不存在返回-1

List底层是数组 长度是10 当元素超过10 开始扩容 从新定义一个1.5倍原容量大小的数组 将原先数组中的元素拷贝到新数组中 新的元素依次往后添加

private static final int DEFAULT_CAPACITY = 10;
......
private void grow(int minCapacity) {
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);  //10+10/2
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

删除元素
指定索引位置后的元素全部往前移动 需要移动很多元素所以删除慢

public E remove(int index) {
        rangeCheck(index);

        modCount++;
        E oldValue = elementData(index);

        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        elementData[--size] = null; // clear to let GC do its work

        return oldValue;
    }

Vector
线程安全的
大部分方法都使用了synchronized修饰

 public synchronized int indexOf(Object o, int index) {
        if (o == null) {
            for (int i = index ; i < elementCount ; i++)
                if (elementData[i]==null)
                    return i;
        } else {
            for (int i = index ; i < elementCount ; i++)
                if (o.equals(elementData[i]))
                    return i;
        }
        return -1;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值