标签:JavaEE ArrayList list System 基础知识 minCapacity println out
文章目录
ArrayList
一、ArrayList基本使用方法
public static void main(String[] args) {
/**
* 使用ArrayList常用方法
*/
//创建集合对象 - 泛型规定该集合只能存储String类型的数据
ArrayList<String> list = new ArrayList<>();
//添加元素
list.add("麻生希");
list.add("椎名空");
list.add("三上悠亚");
list.add("深田咏美");
list.add("波多野结衣");
list.add("明日花绮罗");
list.add("铃原爱蜜莉");
list.add("小西满里惠");
list.add("杨晨");
list.add("陈希");
//往指定的下标上插入元素
list.add(2, "北条麻衣");
//添加集合
// ArrayList<String> newList1 = new ArrayList<>();
// Collections.addAll(newList1, "aaa","bbb","ccc","ddd");//使用集合工具类批量添加元素
// list.addAll(newList1);//把newList1集合中所有的元素添加到list集合中
//在指定下标上添加集合
ArrayList<String> newList1 = new ArrayList<>();
Collections.addAll(newList1, "aaa","bbb","ccc","ddd");//使用集合工具类批量添加元素
list.addAll(2, newList1);//在指定下标把newList1集合中所有的元素添加到list集合中
//删除
list.remove(4);//根据下标删除元素
list.remove("ddd");//根据元素删除元素
list.removeIf(new Predicate<String>() {//根据条件删除元素
@Override
public boolean test(String t) {
if(t.length() >= 5){
return true;
}
return false;
}
});
//删除交集
ArrayList<String> newList2 = new ArrayList<>();
Collections.addAll(newList2, "aaa","xxx","yyy");
list.removeAll(newList2);
//设置指定下标上的元素
list.set(1, "爱田奈奈");
//保留交集
ArrayList<String> newList3 = new ArrayList<>();
Collections.addAll(newList3, "bbb","北条麻衣","yyy","杨晨","陈希");
list.retainAll(newList3);
//获取指定下标上的元素
System.out.println("获取指定下标上的元素:" + list.get(1));
//获取长度
System.out.println("获取集合中元素的个数:" + list.size());
//清空集合中所有的元素
//list.clear();
System.out.println("查询集合中是否包含某个元素:" + list.contains("aaa"));
System.out.println("查询该元素在集合中的下标:" + list.indexOf("aaa"));
System.out.println("判断该集合中是否没有元素:" + list.isEmpty());//没有元素-true 有元素-false
//获取指定下标区间的元素
List<String> newList4 = list.subList(1, 3);
System.out.println(newList4);
System.out.println(Arrays.toString(newList4.toArray()));//集合->数组->字符串
System.out.println("---------------------------");
//遍历集合
//1.for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("---------------------------");
//2.foreach
for (String e : list) {
System.out.println(e);
}
System.out.println("---------------------------");
//3.Iterator
Iterator<String> it = list.iterator();
while(it.hasNext()){//判断是否有可迭代的数据
String next = it.next();//返回下一个数据
System.out.println(next);
}
System.out.println("---------------------------");
//4.ListIterator
ListIterator<String> listIterator = list.listIterator();
while(listIterator.hasNext()){//判断是否有可迭代的数据
String next = listIterator.next();//返回下一个数据
System.out.println(next);
}
}
二、源码分析
public class ArrayList<E> extends AbstractList<E> implements List<E>{
//用于空实例的共享空数组实例。
private static final Object[] EMPTY_ELEMENTDATA = {};
//存放数据的容器
private transient Object[] elementData;
//元素个数
private int size;
//默认初始化容量
private static final int DEFAULT_CAPACITY = 10;
//数组的最大值
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
public ArrayList() {
super();
this.elementData = EMPTY_ELEMENTDATA;
}
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0){
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
this.elementData = new Object[initialCapacity];
}
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
private void ensureCapacityInternal(int minCapacity) {
//判断是否是第一次添加元素
if (elementData == EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
private void ensureExplicitCapacity(int minCapacity) {
modCount++;
//判断扩容的长度一定要比数组的长度要更大,才会扩容
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
private void grow(int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
private static int hugeCapacity(int minCapacity) {//2147483640
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
}
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>{
//操作数
protected transient int modCount = 0;
protected AbstractList() {
}
}
-
ArrayList的数据结构是什么?
Object类型的一维数组
-
ArrayList使用无参构造创建对象,数组长度是多少?
数组长度为0
-
ArrayList中数组默认长度是多少?
10
-
ArrayList中数组最大长度是多少?
Integer.MAX_VALUE-8
-
ArrayList中数组最大长度为什么要-8?
因为-8的空间用于存储数组的基本信息
-
ArrayList的扩容机制/扩容倍数?
原数组长度的1.5倍
-
ArrayList无限扩容后,数组最大值可以到多少?
Integer.MAX_VALUE
这里有推荐一篇关于ArrayLsit的文章
https://blog.csdn.net/qq_42080839/article/details/108126688
标签:JavaEE,ArrayList,list,System,基础知识,minCapacity,println,out 来源: https://blog.csdn.net/qq_40781005/article/details/114433645
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。