package com.wonders.week01.collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
* ArrayList类
* (1)java.lang.util包下的一个工具类
* (2)该类的继承层次:ArrayList extends AbstractList,
* AbstractList extends AbstractCollection,
* AbstractCollection extends Object
* (3)不是线程安全的集合
* @author liyongyong
*
*/
public class ArrayListTest {
/**
* (1)ArrayList是一个实现了List接口的可以自动调整大小的特殊数组。
* 实现了所有可选择的List的操作,容纳所有的数据元素,包括null值。
* 此外还实现了List接口,而且该类还提供了操作数组的大小的方法,可以被用来在内部存储集合元素。
* 这个类大体上和Vector类是类似的,只是ArrayList是非同步的一个类。
* size, isEmpty, get, set, iterator,和listIterator这些操作都是常量时间运行,
* 添加n个元素到集合中需要的算法时间复杂度是O(n)。一般来说所有的其他的方法都是以线性时间在运行。
* 与LinkedList 的实现相比较,ArrayList的常量因素是比较低的。
* (2)每个ArrayList的实例都有自己的一个容量,这个容量就是在集合中数组用来存储元素的大小。
* 它总是至少和集合的大小保持一致。当元素添加到ArrayList中的时候,它的容量会自动增长。
* 容量自动增长策略的细节没有详细的说明,事实上添加一个元素是有恒定的时间成本消耗。
* (3)再向一个ArrayList中添加大量的元素的时候,这个应用可以进行自身扩容,通过使用ensureCapacity
* 方法,这个或许可以减少增加元素的再次分配。
*/
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> arrayList = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
//返回集合元素有多少个
int size = list.size();
System.out.println("该集合有 " + size + "个元素");
//在指定的位置插入一个元素
list.add(0, 9);
System.out.println("此时集合的元素有 " + list.size() + "个");
//向arrayList中添加元素
arrayList.add(6);
arrayList.add(7);
arrayList.add(8);
System.out.println("arrayList集合中有" + arrayList.size() + "个元素");
//向集合list中添加集合arrayList集合中的所有元素
list.addAll(arrayList);
System.out.println("添加arrayList集合元素以后的list集合大小是 : " + list.size());
//把arrayList集合进行复制,返回一个Object类型的对象
Object object = arrayList.clone();
if (object.equals(arrayList)) {
System.out.println("object和arrayList是同一个对象");
}else{
System.out.println("object和arrayList不是同一个对象");
}
//在指定位置添加某个集合的所有元素
list.addAll(3, arrayList);
System.out.println("此时的集合大小 :" + list.size());
boolean flag = arrayList.contains(1);
boolean flag1 = arrayList.contains(6);
boolean flag2 = list.containsAll(arrayList);
System.out.println(flag + "如果结果为true,说明arrayList中包含元素1");
System.out.println(flag1 + "如果结果为true,说明arrayList中包含元素6");
System.out.println(flag2 + "如果结果为true,说明list集合中包含arrayList");
Integer num = list.get(0);
System.out.println("在list中索引为0的元素是 "+num);
//遍历list集合,并且在控制台循环输出list的元素
for (Integer integer : list) {
System.out.print(integer + "=====");
}
System.out.println();
int index = list.indexOf(7);
System.out.println("元素7在集合list中第一次出现的位置索引是 : " + index);
int index2 = list.indexOf(-9);
System.out.println("元素-9在集合list中第一次出现的位置索引是: " + index2);
boolean empty = list.isEmpty();
System.out.println("list是否为空集合:" + empty);
//清空集合中的所有元素
arrayList.clear();
boolean arrayListEmpty = arrayList.isEmpty();
System.out.println("arrayList中是否含有元素 : " + arrayListEmpty);
//以适当的顺序返回该列表中的元素的迭代器
Iterator<Integer> iterator = list.iterator();
//使用iterator来遍历集合
while (iterator.hasNext()) {
System.out.print(iterator.next()+"----");
}
System.out.println();
//用来获取元素在集合中最后一次出现的位置索引
int lastIndex = list.lastIndexOf(7);
System.out.println("元素7在集合中出现的最后一次的位置索引是:" + lastIndex);
//返回一个集合中的集合元素的迭代
ListIterator<Integer> listIterator = list.listIterator();
while (listIterator.hasNext()) {
Integer integer = (Integer) listIterator.next();
System.out.print(integer + "@");
}
System.out.println();
//从指定位置开始,获取集合中的剩余元素迭代的一个子集合
ListIterator<Integer> lIterator = list.listIterator(7);
while (lIterator.hasNext()) {
Integer integer = (Integer) lIterator.next();
System.out.print(integer + " ");
}
System.out.println();
//移除集合中的所有元素
lIterator.remove();
while (lIterator.hasNext()) {
Integer integer = (Integer) lIterator.next();
System.out.println("-----------------------");
System.out.println(integer);
}
boolean flag3 = list.remove(Integer.valueOf(7));
System.out.println("是否从list集合中移除元素7 " + flag3);
boolean removeFlag = list.removeAll(arrayList);
System.out.println("是否从list集合中将arrayList集合中的元素全部移除 : " + removeFlag);
for (Integer integer : list) {
System.out.print(integer + " ");
}
System.out.println();
//用新的元素值替换指定位置的元素值
list.set(list.size()-1, 99);
for (Integer integer : list) {
System.out.print(integer + "=====");
}
System.out.println();
//获取当前集合的一个子集合,子集合的元素是从指定位置开始截取到指定位置结束
List<Integer> list2 = list.subList(2, list.size()-1);
for (Integer integer : list2) {
System.out.print(integer + " ");
}
System.out.println();
Object[] arr = list2.toArray();
for (int i = 0; i < arr.length; i++) {
System.out.print( arr[i] + "xxx");
}
}
}
```![这里写图片描述](https://img-blog.csdn.net/20170725191607111?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjkzNDMyNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190403123149322.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzQzMjU=,size_16,color_FFFFFF,t_70)
API学习ArrayList
最新推荐文章于 2024-02-07 15:56:50 发布