List接口

List接口及其实现类支持索引    有序的collection , 允许重复

Collection中没有   get set add remove 

    add(int index,Object obj) 在指定索引处插入(与添加区分)list.add(0, "周芷若"); 无返回值    Collection中没有此方法

    add(Object obj)    向列表的尾部添加指定的元素    add(3); 返回boolean类型

     set(int index,Object obj) 在指定索引处修改    list.set(0, "小昭");

    get(int index)获取     System.out.println(list.get(2));   

    remove(int index) 删除    list.remove(0);   无返回值

    indexOf(Object obj)        返回第一次出现索引   没有则返回-1

    lastIndexOf(Object obj)    返回最后一次出现的索引  没有则返回-1

list集合遍历方法

Iterator iterator = list.iterator();
while (iterator.hasNext()) {
    Object object = iterator.next();
    System.out.println(object);
}

for (Object object : list) {
    System.out.println(object);
}

for(int i=0;i<list.size();i++){
    Object object = list.get(i);
    System.out.println(object);
}

List接口的实现类——ArrayList

特点:

    有序  有索引  允许重复  底层是 数组结构,可以理解成是一个Object类型的数组   底层也是通过新建数组来扩容的

构造器:

    new ArrayList();  构造一个初始容量为10的集合,当添加第11个元素时,会扩容一半 (Vector每次扩容一倍)

    new ArrayList(int capcity) ;构造一个初始容量为capcity的集合

方法: 基本都是List里的方法。

 

List接口的实现类——LinkedList

特点:

    底层 是  双向链表结构(prev , next)  

    有序  有索引  允许重复      

构造器:

    new LinkedList();//构造一个空链表

常见方法:

addFirst    添加到首位,addLast     添加到末尾,removeFirst 删除首位,removeLast  删除末尾,getFirst    获取首位,getLast     获取末尾,add(int index, E element),set(int index, E element)  修改,toArray()   转换成数组

toArray() 方法说明:

【强制】使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型完全一样的数组,大小就是list.size()。

说明:使用toArray带参方法,入参分配的数组空间不够大时,toArray方法内部将重新分配内存空间,并返回新数组地址;如果数组元素大于实际所需,下标为[ list.size() ]的数组元素将被置为null,其它数组元素保持原值,因此最好将方法入参数组大小定义与集合元素个数一致。 正例:

List<String> list = new ArrayList<String>(2);

list.add("guan");

list.add("bao");

String[] array = new String[list.size()];

array = list.toArray(array);

反例:直接使用toArray无参方法存在问题,此方法返回值只能是Object[]类,若强转其它类型数组将出现ClassCastException错误

 

LinkedList和ArrayList的对比

                           底层结构        增删             改,查

    ArrayList           数组          效率较低         效率较高             

    LinkedList         链表          效率较高         效率较低

注意:更专业的说法是: ArrayList在通过索引查找的时候效率更快,如果不加索引和LinkedList一样,都是一个一个的查要修改要先查找,所以同理

     当ArrayList容量够不涉及扩容并且是给最后增加元素比LinkedList还快,往中间加或者扩容时就不行了,这种情况就是LinkedList快删除同理

Vector和ArrayList的对比 (vector使用同ArrayList)

  

                  底层结构         线程同步          安全性     效率       版本

    ArrayList     数组            不同步          不安全      高        新

    Vector        数组            同步            安全        低        老

  Vector 每次扩容扩一倍,ArrayList扩一半

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值