一 ArrayList
内部通过数组实现,允许对元素进行快速随机访问。数组大小不满足时需要增加存储能力,就要将数据复制到新的存储空间中。插入或删除时,需要对数组进行移动复制,代价较高。因此,适合查找和遍历,不适合插入和删除。ArrayList是线程不安全的。当容量不够时,ArrayList当前容量*1.5+1。
代码引用:https://www.cnblogs.com/panbingqi/p/11041182.html
public class ArrayListInThread implements Runnable{ //线程不安全 private List threadList = new ArrayList(); //线程安全 //private List threadList = Collections.synchronizedList(new ArrayList()); @Override public void run() { try { Thread.sleep(10); }catch (InterruptedException e){ e.printStackTrace(); } //把当前线程名称加入list中 threadList.add(Thread.currentThread().getName()); } public static void main(String[] args) throws InterruptedException{ ArrayListInThread listThread = new ArrayListInThread(); for(int i = 0; i < 100; i++){ Thread thread = new Thread(listThread, String.valueOf(i)); thread.start(); } //等待子线程执行完 Thread.sleep(2000); System.out.println(listThread.threadList.size()); //输出list中的值 for(int i = 0; i < listThread.threadList.size(); i++){ if(listThread.threadList.get(i) == null){ System.out.println();; } System.out.print(listThread.threadList.get(i) + " "); } } }
Collections.synchronizedList(new LinkedList<String>())
Collections.synchronizedList(new LinkedList<String>())
通过加锁实现线程同步。
二 Vector
通过数组实现,Vector支持线程同步,即某一时刻只有一个线程能够写Vector,因此,访问它比访问ArrayList慢。
三 LinkedList
使用链表结构存储数组,很适合数据的动态插入与删除,随机访问速度比较慢。另外,他还提供了 List 接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
原文:https://www.cnblogs.com/liuhaichuan/p/13524732.html