List集合

一、List子接口

  • 特点:有序、有下标、元素可以重复

  • 方法:

    • void add(int index,Object o); //在index位置插入对象o(基本类型自动装箱)

    • boolean addAll(int index,Collection c); //将一个集合中的元素添加到此集合中的index位置

    • Object get(int index); //返回集合中指定位置的元素

    • List subList(int fromIndex,int toIndex); //返回fromIndex和toIndex之间的集合元素

    • int indexOf(Object o); //返回此列表中第一次出现指定元素的索引;如果此列表不包含该元素,则返回-1

  • 遍历方法:

    • for

    • 增强for

    • Iterator迭代器

    • ListIterator列表迭代器(可以向前或向后遍历,增加删除和修改元素)

  • 注意点:remove方法的传对象方式,其实调用了equals方法,实际上比较的是地址值。所以如果传入的是对象,则通过地址后进行删除,不存在该地址则不删除。如果想要通过new的方式去删除,则要重写该类的equals方法


二、List的实现类

一、ArrayList

  • 数组结构实现,查询快、增删慢;

  • JDK1.2版本,运行效率快、线程不安全

  • 默认容量:DEFAULT_CAPACITY=10;

  • 注意:如果没有向集合中添加任何元素,默认容量是0;添加一个元素之后容量为10;当添加第11个元素时,会扩容到15。

  • 也就是说,每次扩容都是上次的1.5倍

  • 存放元素的数组:elementData

  • 实际的元素个数:size

public boolean add(E e){
    ensureCapacityInternal(size + 1); //Increments modCount!!
    elementData[size++] =e;
   return true;
}
​
​
private void ensureCapacityInternal(int minCapacity){
  if(elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA){
  minCapacity=Math.max(DEFAULT_CAPACITY,minCapacity)
  }
    ensureExplicitCapacity(minCapacity);
}
​
​
private void ensureExplicitCapacity(int minCapacity){
    modCount++;
    
    //overflow-conscious code
    if(minCapacity - elementData.length >0){
        grow(minCapacity);
    }
}
​
​
private void grow(int minCapacity){
    //overflow - conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity+(oldCapacity >> 1);
    if(newCapacity - minCapacity <0){
        newCapacity = minCapacity;
    }
    if(newCapacity -MAX_ARRAY_SIZE >0){
        newCapacity = hugeCapacity(minCapacity);
        //minCapacity is usually close to size ,so this is a win; 
  elementData=Arrays.copyOf(elementData,newCapacity);
    }
}


二、Vector

  • 数组结构实现,查询快、增删慢;

  • JDK1.0版本,运行效率慢、线程安全

  • 大部分方法和ArrayList类似,它的独有遍历方法是枚举器

    • elements();

    • firstElement();

    • lastElement();

    • elementAt();

Enumeration en = vector.elements();
while(en.hasMoreElements()){
    String o = (String)en.nextElement();
    System.out.println(o);
}

三、LinkedList

  • 链表结构实现,增删快、查询慢

  • 方法基本和ArrayList相同

  • ArrayList和LinkedList的区别

    • ArrayList:必须开辟连续空间,查询快增删慢。

    • LinkedList:无需开辟连续空间,查询慢增删快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值