欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
Facts speak louder than words!
ArrayList是Java中的一个类,它实现了List接口,是基于动态数组的数据结构。它可以自动扩展以容纳任意数量的元素,并允许随机访问元素。ArrayList是使用数组实现的,所以它具有数组的优点,如随机访问快速,但也有一些缺点,如插入和删除元素时的性能较差。
以下是ArrayList的一些重要特性和用法:
1.自动扩容:当向ArrayList中添加元素时,如果当前容量不足,它会自动增加容量以容纳新元素。这个过程是通过创建一个更大的数组,并将原始数组中的元素复制到新数组中来实现的。根据下面源代码,可以看出数组的默认长度为10。
java">/*** 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)。
java">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下标的元素为2System.out.println(list.set(0, 2));//1//判断集合中是否存在元素5System.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)方法删除指定的元素。
java">public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(2);//尾插2System.out.println(list.toString());// [2]list.add(0,1);//0下标插入1System.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]}
java">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);// 1System.out.println(list.toString());// [2, 3, 2, 1]//删除第一个2//通过显示装箱,将2数字包装成对应的包装类boolean result = list.remove(new Integer(2));System.out.println(result);// trueSystem.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()方法来遍历元素。
java"> ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);//打印一:forfor (int i = 0; i < arrayList.size(); i++) {System.out.print(arrayList.get(i)+" ");}//打印二:foreachfor (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,让我们一起加油吧!🌙🌙🌙