博客信息

集合框架List(ArrayList特有方法、特有迭代器、具体对象特点、增长因子论证)

发布时间:『 2019-05-12 11:29』  博客类别:java基础  阅读(864)

list特有方法



list特有迭代器ListIterator

小李飞刀_集合框架


list具体对象特点

小李飞刀_集合框架


ArrayList集合增长因为0.5,初始长度为10,明确这一特点就可以通过改变初始长度,来提升代码性能问题

/**
     * ArrayList集合增长因子论证
     * @param args
     * @throws NoSuchFieldException
     * @throws SecurityException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     */
    public static void method_increment(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        ArrayList list = new ArrayList<>(50);
        getLen(list);
        for (int i = 1; i <= 60; i++) {
            list.add(i);
            System.out.print(i+",");
            getLen(list);
        }

    }

    /**
     * list集合底层的数组长度
     * @param list
     * @throws NoSuchFieldException
     * @throws SecurityException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     */
    public static void getLen(ArrayList list) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        Field declaredField = list.getClass().getDeclaredField("elementData");
        declaredField.setAccessible(true);
        Object object = declaredField.get(list);
        Object[] elementData = (Object[]) object;
        System.out.println("elementData.length:"+elementData.length);
    }


相关代码如下

package com.javaxl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

/**
 * @author 小李飞刀
 * @site www.javaxl.com
 * @company
 * @create  2019-05-12 22:37
 *
 * 1、list集合相对于collection集合所特有的方法
 * 2、Iterator.remove()与Collection.remove()的区别
 * 3、Iterator与ListIterator的区别
 *
 * Collection
 * List	有序	元素可以重复	因为该集合体系有索引
 *      Arraylist 数组结构 增删慢,查询快 有连续下标    线程不同步   增长因子为1.5
 *      vector    数组结构 增删改查都慢 有连续下标     线程同步    增长因子2
 *      Linkedlist 链表结构 增删快,查询慢 没有连续下标
 * Set	无序	元素不可以重复
 *
 * List:凡是可以操作角标的方法都是该体系所特有的方法
 * 增
 * Add(index,element)
 * Add(index,Collection)
 *
 * 删
 * Remove(index)
 *
 * 改
 * Set(index,element)
 *
 * 查
 * Get(index)
 * subList(from,to)
 * listIterator()
 * index(element)
 *
 * list集合所特有的迭代器,ListIterator是Iterator的子接口
 * 在迭代时,不可以通过集合对象的方法操作集合中的元素;
 * 因为会发生并发修改异常(ConcurrentModificationException);
 * 所以,在迭代时,只能通过迭代器来操作元素,课时Iterator的方法是有限的,Iterator只提供了判断、
 * 取出、删除的操作;
 * 如果想要有其他的操作,如添加、修改等,就需要使用其子接口ListIterator,该接口只能list集合的listIterator方法来获取
 */
public class ListDemo {
    public static void main(String[] args) {
        ArrayList al = new ArrayList();
        al.add("java01");
        al.add("java02");
        al.add("java03");
        al.add("java04");

        Iterator it = al.iterator();
        while (it.hasNext()){
            Object obj = it.next();
            if("java02".equals(obj)){
//                al.remove(obj);// 出现并发异常ConcurrentModificationException,有迭代器对象与集合对象同时对obj进行操作
                it.remove();// 都用迭代器进行操作,不会出现上诉异常,另外,这句代码在内存中的意思是,将obj引用从堆内存集合中移除。但是栈内存中还有obj引用,堆内存中还有该元素对象
            }
            System.out.println(obj);// java02依然会被打印
        }
        System.out.println("集合:"+al);

//        for(Iterator it2 = al.iterator();it2.hasNext();){
//            System.out.println(it2.next());
//        }

//        修改元素
        ListIterator lit = al.listIterator();
        while(lit.hasNext()){
            Object obj = lit.next();
            if("java03".equals(obj)){
                lit.set("java09");
            }
        }
        System.out.println("集合:"+al);//Java03变成了Java09


    }

    public static void method_special(String[] args) {
        ArrayList al = new ArrayList();
        al.add("java01");
        al.add("java02");
        al.add("java03");
        al.add("java04");

        System.out.println("原集合是:"+al);
        al.add(1,"java09");
        System.out.println("现在集合是:"+al);
        al.remove(2);
        System.out.println("现在集合是:"+al);
        al.set(2,"java08");
        System.out.println("现在集合是:"+al);

        //list特有的遍历方式
        for(int i=0;i<al.size();i++){
            System.out.println("al["+i+"]="+al.get(i));
        }

//        迭代器遍历
        Iterator it = al.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }

        System.out.println("java09 index:"+al.indexOf("java09"));
        System.out.println("获取1到3的元素:"+al.subList(1,3));
    }
}





关键字:     Java基础       集合框架       List  

备案号:湘ICP备19000029号

Copyright © 2018-2019 javaxl晓码阁 版权所有