集合Collection-List-(ArrayList/LinkedList)

ArrayList集合
底层是数组,如何实现自动扩容?简言之底层代码创建1.5倍于之前长度的数组,并将旧的数组复制到新的数组中。
特点:查询快,增删慢(相对而言,数据量一大就不一定了)
源码需了解内容: ArrayList底层数组的初始化长度是0
        第一次添加元素的时候扩容到10
        扩容时机:当元素个数超过数组长度时
        扩容规则:之前长度的1.5倍( int newCapacity = oldCapacity + (oldCapacity >> 1);)
LinkedList集合
底层是链表,是双向链表,每一个结点分三个部分,分别存储了上一结点的地址,数据,下一结点的地址。
特点:查询慢,增删快(相对而言,数据量一大就不一定了)
源码需了解内容: 01.元素存储形式是以Node的形式进行存储的,内含三个变量:
        a. 前一个元素的地址
        b. 元素值
        c. 后一个元素的地址值
        02.查询方式是以中心点进行判断是从头进行遍历,还是从尾部进行遍历(越靠近之间就越慢)

ArrayList集合删除元素(fori)

/* public boolean removeIf(Predicate<? super E> filter) */
//根据条件移除集合元素(参数是lambda表达式(参数:list中元素类型)->{ return 需过滤元素的条件语句})
 
import java.util.ArrayList;
/* public boolean removeIf(Predicate<? super E> filter) */

public class CollectionDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaaa");
        list.add("aaa");
        list.add("aaab");
        list.add("aaa");

        //根据条件移除集合元素(参数是lambda表达式(参数:list中元素类型)->{ return 需过滤元素的条件语句})
        list.removeIf((String s) ->{
           return s.length()==4;
        });


        System.out.println(list);
    }
}
 

 

猜你喜欢

转载自www.cnblogs.com/yifas/p/13199818.html