欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
Facts speak louder than words!
ArrayList是Java中的一个类,它实现了List接口,是基于动态数组的数据结构。它可以自动扩展以容纳任意数量的元素,并允许随机访问元素。ArrayList是使用数组实现的,所以它具有数组的优点,如随机访问快速,但也有一些缺点,如插入和删除元素时的性能较差。
以下是ArrayList的一些重要特性和用法:
1.自动扩容:当向ArrayList中添加元素时,如果当前容量不足,它会自动增加容量以容纳新元素。这个过程是通过创建一个更大的数组,并将原始数组中的元素复制到新数组中来实现的。根据下面源代码,可以看出数组的默认长度为10。
/**
* Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;
private static int calculateCapacity(Object[] elementData, int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
return Math.max(DEFAULT_CAPACITY, minCapacity);
}
return minCapacity;
}
2.随机访问:ArrayList允许通过索引来访问元素。通过调用get(int index)方法,可以获取指定位置的元素。由于ArrayList是基于数组实现的,所以在访问指定位置的元素时速度很快,时间复杂度为O(1)。
public static void main(String[] args) {
ArrayList<Integer> = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(1);
list.add(2);
//获取1下标的元素
System.out.println(list.get(1));//2
//设置0下标的元素为2
System.out.println(list.set(0, 2));//1
//判断集合中是否存在元素5
System.out.println(list.contains(5));//false
//返回第一个2出现的位置
System.out.println(list.indexOf(2));//0
//返回最后一次出现2的位置
System.out.println(list.lastIndexOf(2));//4
//截取0~3位置的元素
List<Integer> sub = list.subList(0,3);
System.out.println(sub.toString());// [2, 2, 3]
System.out.println(list.toString());// [2, 2, 3, 1, 2]
}
3.动态添加和删除元素:ArrayList提供了一系列的方法来添加和删除元素。可以使用add(E element)方法在列表的末尾添加元素,也可以使用add(int index, E element)方法在指定位置插入元素。可以使用remove(int index)方法删除指定位置的元素,也可以使用remove(Object obj)方法删除指定的元素。
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(2);//尾插2
System.out.println(list.toString());// [2]
list.add(0,1);//0下标插入1
System.out.println(list.toString());// [1, 2]
//Collection接口的子类
List<Integer> list2 = new LinkedList<>();
list2.add(3);
list2.add(4);
list.addAll(list2);//将list2集合中的元素尾插到list中
System.out.println(list.toString());// [1, 2, 3, 4]
list.addAll(1,list2);//将list2集合中的元素从1下标插入list中
System.out.println(list.toString());// [1, 3, 4, 2, 3, 4]
}
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(2);
list.add(1);
//删除下标为0的元素,并返回该元素
int n = list.remove(0);
System.out.println(n);// 1
System.out.println(list.toString());// [2, 3, 2, 1]
//删除第一个2
//通过显示装箱,将2数字包装成对应的包装类
boolean result = list.remove(new Integer(2));
System.out.println(result);// true
System.out.println(list.toString());// [3, 2, 1]
//清空元素
list.clear();
System.out.println(list.toString());// []
}
4.遍历元素:可以使用for循环或迭代器来遍历ArrayList中的元素。使用for循环时,可以通过调用size()方法来获取列表的大小,然后使用get(int index)方法来获取每个元素。使用迭代器时,可以调用iterator()方法来获取迭代器对象,并使用hasNext()和next()方法来遍历元素。
ArrayList<Integer> arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
//打印一:for
for (int i = 0; i < arrayList.size(); i++) {
System.out.print(arrayList.get(i)+" ");
}
//打印二:foreach
for (Integer x : arrayList) {
System.out.print(x + " ");
}
System.out.println();
//打印三:迭代器
//默认是从 0 下标开始打印
System.out.println("===Iterator===");
Iterator<Integer> it = arrayList.iterator();//创建迭代器
while (it.hasNext()) {
System.out.print(it.next() +" ");
}
System.out.println();
System.out.println("===listIterator倒着打印===");
//从 指定位置 开始打印 list1.size()
ListIterator<Integer> it2 = arrayList.listIterator(arrayList.size());
while (it2.hasPrevious()) {
System.out.print(it2.previous() +" ");
}
System.out.println();
5.泛型支持:ArrayList是一个泛型类,可以指定存储在其中的元素类型。这可以增加代码的类型安全性,并且在编译时可以更好地检测错误。
6.可以存储任意类型的元素:ArrayList可以存储任何类型的对象,包括基本数据类型的包装类,如Integer和Double。
总结起来,ArrayList是一个可变大小的数组,它提供了高效的随机访问和动态添加/删除元素的功能。使用ArrayList可以方便地操作和管理大量的数据。但是需要注意的是,由于ArrayList是基于数组实现的,所以在频繁插入和删除元素时性能较低,这时应该考虑使用LinkedList等其他数据结构。
觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥The road is long and the line is coming,让我们一起加油吧!🌙🌙🌙