语法: 集合定义 List<泛型> 集合名称 = new 实现类<泛型>();
泛型: 集合中存储数据的数据类型: 如果存储基本数据类型的话, 那么这里就得使用基本数据类型的包装类 Integer 也可以存储引用数据类型: List Array Object....
//语法 1. 添加元素 boolean b = 集合名称.add(数据); //依次往后进行添加 2. 获取元素 数据类型 变量名 = 集合名称.get(下标值); 3. 集合长度 int length = 集合名称.size(); 4. 普通for循环遍历集合 5. 增强for循环遍历集合 6. 在指定位置添加元素 boolean b = 集合名称.add(下标位置,数据); 7. 通过元素本身来删除元素 集合名称.remove(数据); 8. 通过下标来删除元素 集合名称.remove(下标位置); //下标必须是int类型 9. 清空集合 集合名称.clear();
ArrayList是基于数组实现的, 它的内部封装了一个Object类型的数组
通过默认构造器创建ArrayList容器时, 该数组先被初始化为空数组, 之后再首次添加数据时, 再将其初始化成 长度为10的数组.
我们也可以使用有参构造方法来创建容器,并通过参数来显式指定数组的容量, 届时 该数组初始化的长度就是指定数量的数组
如果向ArrayList中添加数组, 会造成超出数组长度限制, 则会触发自动扩容, 然后在添加数据.
扩容就是数组的拷贝, 将旧数组中的数据拷贝到新数组中, 而新数组的长度是原来长度的1.5倍
ArrayList支持扩容, 也支持缩容, 扩容是可以自动扩容, 但是缩容是只能手动缩容.
如果我们希望缩减ArrayList的容量,那么就得调用自己的方法(trimToSize()方法), 届时, 数组将按照元素实际的个数进行缩减.
指多个线程在执行同一段代码的时候采用了加锁机制, 使每一次执行结果和单线程执行的结果都是一样的, 不存在执行程序时出现意外结果
指不提供加锁机制, 有可能出现多个线程先后更改数据,造成所得到的数据是脏数据
相同点:
元素有序
元素可重复
这两个集合都是线程不安全的.***
不同点:
数据结构不一样. ArrayList的数据结构是数组 ,而 LinkedList的数据结构是双向链表
特性不一样. ArrayList查询快,增删慢, LinkedList 查询慢, 增删快
内存占用不一样, LinkedList要比ArrayList更占内存, 因为LinkedList的节点除了存储数据, 还存储了两个引用, 一个是指向了前一个元素, 一个是指向了后一个元素
在Collections工具类型中 提供了一个方法 synchronizedXXX() (星扣耐资特d) 包装器 (不用, 效率特慢) ConcurrentModificationException 并发异常
Vector集合是JDK1.5版本之前就已经存在的集合了, 它特别古老,现在没人使用它了, 它是线程安全的集合. (不用)
JDK1.5版本以后提出的 JUC包(并发包)下的集合 CopyOnWriterArrayList 是线程安全的集合, 它实现了List接口, 相当于线程安全的ArrayList (用 , 线程安全, 效率也慢)
如果后期你开发多线程项目(银行项目, 那么就得考虑 线程安全问题)