ArrayList 底层使用的是 Object 数组;LinkedList 底层使用的是双向链表数据结构; LinkedList 不支持高效的随机元素访问,而 ArrayList(实现了 RandomAccess 接口) 支持。 ArrayList存在扩容问题,LinkedList不存在,直接放在集合尾部,修改指针即可; 问四:知道ArrayList的扩容机制吗? 要想充分的了解ArrayList的扩容,必须静心阅读其...
ArrayList<String> arrayList =newArrayList<>(); arrayList.add("张三"); arrayList.add("李四"); arrayList.add("王二"); ArrayList<String> arrayList2 =newArrayList<>(); arrayList2.add("麻子"); arrayList2.add("铁子"); arrayList.addAll(1,arrayList2); System.out.println(arrayList); } 输出: [...
1.1 空参构造ArrayList() /** * Constructs an empty list with an initial capacity of ten. */ public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } 空参构造非常简单,将DEFAULTCAPACITY_EMPTY_ELEMENTDATA赋值给elementData ,会为我们创建一个空的集合。DEFAULTCAPACITY_EMPTY_ELEMENTDAT...
ArrayList底层是有一个Object[]数组实现,具有实例化、随机访问访问、克隆的功能,其内部大量使用System.arraycopy与Arrays.copyOf函数来实现它的功能。经过通过分析代码,ArrayList并不是并发安全,虽然其内部有fail-fast机制来保证,也就是有出现并发操作导致数据问题我就抛出问题出来,所以该类在并发下并不能使用。 补充 Sy...
# Array element sizes: 8, 1, 1, 2, 2, 4, 4, 8, 8 [bytes] java.util.ArrayList objec...
arrayList.add("java04"); // 写法一 /* Iterator iterable = arrayList.iterator(); while (iterable.hasNext()) { System.out.println(iterable.next()); } */ // 写法二,推荐使用这种方式,因为这种方式节省内存,定义在局部变量在执行完就释放了,而while没有。
1. ArrayList ArrayList是最最常用的集合类了,真的没有之一。下面的分析是基于1.8.0_261源码进行分析的。 1.1 ArrayList特点介绍 动态数组,使用的时候,只需要操作即可,内部已经实现扩容机制。 线程不安全 有顺序,会按照添加进去的顺序排好 基于数组实现,随机访问速度快,插入和删除较慢一点 ...
* 1 简易的ArrayList */ public static ArrayList getArrayList(){ ArrayList arrayList = new ArrayList(); arrayList.add("张三"); arrayList.add("里斯"); return arrayList; } 一些在线编辑器中会报双黄线或是浅黄情况提醒,如下图 这一必须给ArrayList一个种类,比如ArrayList<String>. ...
equals(elementData[i])) return i; } return -1; } /** * 返回 ArrayList 实例的浅拷贝 */ public Object clone() { try { ArrayList<?> v = (ArrayList<?>) super.clone(); // 实现数组的复制,参数为被复制者的参数 v.elementData = Arrays.copyOf(elementData, size); v.modCount = 0; ...
4. ArrayList源码解析之修改功能和获取功能 4.1 修改功能源码 修改功能方法名为set,接收一个被修改元素的索引和新的元素,上源码: public E set(int index, E element) { // 检查是否索引越界,如果越界,则抛出异常 Objects.checkIndex(index, size); // 先把被修改的元素用一个变量存储起来 E oldValue = el...