ArrayList的使用
- 增加数据
public class ArrayListTest {
public static void main(String[] args) {
//new两个ArrayList对象,只能存放String型数据
ArrayList<String> arr1=new ArrayList<>();
ArrayList<String> arr2=new ArrayList<>();
//添加数据,包括单个参加和批量参加
for (int i = 0; i < 10; i++) {
/**
*单个添加:add(String e)每次添加一个数据,在arr1中按插入顺序排列(相当于尾插)
* 有个boolean型返回值,只返回true
*/
arr1.add(i+"arr1");
}
/**
* add(int index,String element)
* 无返回值
* index不能超过arr中已有元素的个数,否则会抛IndexOutOfBoundsException异常
*因为底层是数组,存放数据不能有间隔,必须连续
* 例如:这里arr集合中已有10个元素,最后一个元素的下标是9,那么index不能大于10
* 此方法是指定下标插入数据
* 例如:这里index=2,在下标2下添加"10arr",原来arr中从下标2开始后的元素全部向后移
* 如果这里index=arr中元素的个数,那就相当于上面的add(String e)
*/
arr1.add(2,"2arr1");//可以体现ArrayList元素可重复性,已有2arr1,还可以插入2arr1
/**
* addAll(Collection c)
* 批量添加:传进去一个集合arr1,在原集合arr2的尾部插入arr1中的所有元素
* 注意!:
* 这里传进去的集合可以传Collection中的集合,不一定非得是ArrayList,但不能传Map
* 这个方法有个boolean型返回值,返回的是传进去的集合中元素的个数是不是0,是0则返回false
* 相当于没有插入数据(插入0个数据)
*/
HashSet<String> arr3=new HashSet<>();
arr3.add("arr3");
System.out.println(arr2.addAll(arr3));
/**
* addAll(int index,Collection c)
*从传入的index开始插入传入的Collection c中的元素,从index开始(包括index)后的元素依次向后移动
* 对比add(int index,String element)和addAll(Collection c)去理解addAll(int index,Collection c)
* 返回值与addAll(Collection c)类似
*/
arr2.addAll(1,arr1);
//通过构造函数实现批量添加
ArrayList<String> arr4=new ArrayList<>(arr1);
}
}
- 删除和更改数据
此代码放在增加代码的末尾
//删除数据
/**
* remove(int index)删除index下标对应的元素,返回值为删除的那个元素
* remove(Object o)在集合中找到传进去的数据并删除
* 有多少删除多少,这里集合arr1中有两个2arr1,都删除掉
* removeAll(Collection c)删除集合中与传入集合数据相同的数据
* 这里删除集合arr2中与集合arr1中元素相同的元素
* retainAll(Collection c)删除集合中与传入集合数据不同的数据(相当于求交集)
* 这里删除集合arr2中与集合arr3中元素不同的元素
*/
arr1.remove(3);
arr1.remove("2arr1");
arr2.removeAll(arr1);
arr2.retainAll(arr3);
//更改数据:先删除要更改的数据,再添加新数据
//将集合arr1下标2的数据改为"2AAA"
arr1.remove(2);
arr1.add(2,"2AAA");
- 查询数据
//查询数据
/**
*get(int index)根据下标查询数据
* 返回值是下标对应的数据
* indexOf(Object o)
* 返回集合arr1中第一个"ZAAA"的下标,没有则返回-1
*/
System.out.println(arr1.get(0));
System.out.println(arr1.indexOf("2AAA"));
//遍历集合
//for循环 size()获取集合元素个数
System.out.println("for循环遍历集合arr2");
for (int i = 0; i < arr2.size(); i++) {
System.out.print(arr2.get(i)+" ");
}
System.out.println();
//forEach: arr1.for
System.out.println("forEach遍历集合arr1");
for (String s : arr1) {
System.out.print(s+" ");
}
System.out.println();
//迭代器遍历集合
/**
* 先得到集合的迭代器Iterator iterator
*Iterator中
* hasNext()判断集合是否存在下一个元素
* next()返回当前下标元素,下标下移
* remove()删除当前下标的元素
*/
System.out.println("迭代器遍历集合arr1");
Iterator iterator=arr1.iterator();
while(iterator.hasNext()){
System.out.print(iterator.next()+" ");
iterator.remove();
}
System.out.println();
System.out.println("迭代器遍历集合arr1");
while(iterator.hasNext()){
System.out.print(iterator.next()+" ");//上一次遍历把元素全删除了
}
System.out.println();
将添加、删除和更改、查询三部分代码按顺序整合的运行结果
- 判断元素是否存在
boolean contains=arr2.contains("arr3");
System.out.println(contains);//打印true
System.out.println(arr1.containsAll(arr2));//arr1第一次迭代遍历remove后为空,打印false
- ArrayList转换成数组
//转成数组
/**
* toArray()返回Object[]
* toArray(T[])返回T[]
*/
Object[] objects=arr4.toArray();
System.out.println(Arrays.toString(objects));
String[] str=new String[arr1.size()];
arr1.toArray(str);
System.out.println(Arrays.toString(str));
//toString()将集合中元素拼接成数组打印形式的字符串
System.out.println(arr4.toString());
//直接打印集合名打印结果和toString()相同
System.out.println(arr4);
- 求子集合
/**
* 转成list型--->求子集合
* subList(int formIndex,int toIndex)
* 将原集合[formIndex,toIndex)区间转化成List
*/
List<String> sublist=arr4.subList(3,6);//[3,6)
System.out.println(sublist);
注意!!!以上所有代码按需求整合进main方法,就可以打印出相应结果