List接口 有序,不唯一(java.util)
ArrayList 底层数据结构是数组
优点:遍历数组比较快
缺点:删除和添加元素效率比较低
(删除和添加的快慢和效率取决于插入的位置以及总容量的数量)
每次扩容0.5倍
(1)添加元素
list1.add("Hello");
(2)查看集合中元素的个数 size()
list1.size()
(3)查看集合是否为空
list1.isEmpty()
(4)将指定元素对象添加到当前集合中 addAll(Collection c)
List list1 = new ArrayList<>();
//(1)添加元素 add(Object obj)
list1.add("Hello");
list1.add(123);//自动装箱 Integer类型
List list2 = new ArrayList<>();
list2.add("hello");
list2.add(456);
list1.addAll(list2);
System.out.println("重新查看list1中的元素个数:"+list1.size());
System.out.println("查看list集合中的元素:"+list1);
(5)删除元素 (对象&索引两种方式 从左到右第一个)
list1.remove("hello")
System.out.println("根据对象删除元素:"+list1.remove("hello"));
//删除123 System.out.println("根据索引来删除:"+list1.remove(0));
//list1.remove(123) 会报错,原因是超出边界,因为编译器会认为是删除索引list1.remove(new Integer(123));//此处为正确方式 //删除 a 集合中所有 b集合里包含的内容 list1[hello,123,world] list2[hello,123] list1.remove(list2);//执行后 只剩下 list1[world]//删除 两个集合中不同的元素 list1.retainAll(list2);
(6)判断 指定元素在集合中是否存在(返回boolean类型结果 true/false
System.out.println("hello在集合中是否存在:"+list1.contains("hello"));
//判断集合1是否包含集合2全部元素(返回boolean类型结果 true/false
System.out.println("判断集合1是否包含集合2全部元素"+list1.containsAll(list2));
(7)清空集合内所有元素对象
list1.clear();
(8)获取指定索引位置上的元素对象
list1.get(1);
(9)将指定索引位置上的元素对象设置成新对象
list1.set(1,"java");
(10)在指定的位置上添加
list1.add(1,"html");
(11)查找元素在集合中的位置 (左到右第一个元素对象) 没有为-1
list1.indexOf("java");
(12)遍历集合中所有的内容
12.1 使用加强for循环去遍历集合中的元素
System.out.println("使用加强for循环去遍历集合中的元素");
for (Object obj : list1) {
System.out.println(obj);
}
12.2 使用普通for循环遍历
System.out.println("使用普通for循环遍历");
for (int i = 0; i < list1.size(); i++) {
System.out.println(list1.get(i));//get 根据索引去获取对象
}
12.3.1 使用迭代器遍历(正向遍历)
Iterator ite = list1.iterator(); //正向遍历
while (ite.hasNext()){//判断集合中是否有元素对象
Object obj = ite.next();//自动进行了向上类型转换
System.out.println(obj);
}
12.3.2 使用迭代器遍历(逆向遍历)
System.out.println("使用listIterator()逆向遍历");
ListIterator listIterator = list1.listIterator();
System.out.println("正向遍历");//原理:先看看集合中的元素有那些再进行逆向遍历 System.out.println("在集合开头,后面还有元素吗"+listIterator.hasNext());
System.out.println("在集合开头,前面还有元素吗"+listIterator.hasPrevious());
while (listIterator.hasNext()){
System.out.println(listIterator.next());
}
System.out.println("到达集合末尾,后面还有元素吗"+listIterator.hasNext());
System.out.println("到达集合末尾,前面还有元素吗"+listIterator.hasPrevious());
System.out.println("逆向遍历集合中的元素");
while (listIterator.hasPrevious()){
System.out.println(listIterator.previous());
}
package com.lin.list;
import java.util.*;
public class TestArrayList {
public static void main(String[] args) {
//创建集合对象 接口 new 实现类
List list1 = new ArrayList<>();
//(1)添加元素 add(Object obj)
list1.add("Hello");
list1.add(123);//自动装箱 Integer类型
list1.add(new Scanner(System.in));
//(2)查看集合中元素的个数 size()
System.out.println(list1.size());
//(3)查看集合是否为空
System.out.println("查看集合是否为空:"+list1.isEmpty());
//(4)将指定元素对象添加到当前集合中 addAll(Collection c)
List list2 = new ArrayList();
list2.add("hello");
list2.add(456);
list1.addAll(list2);
System.out.println("重新查看list1中的元素个数:"+list1.size());
System.out.println("查看list集合中的元素:"+list1);
//(5)删除元素 (对象&索引两种方式 从左到右第一个)
System.out.println("根据对象删除元素:"+list1.remove("hello"));
//删除123
System.out.println("根据索引来删除:"+list1.remove(0));
//list1.remove(123) 会报错,原因是超出边界,因为编译器会认为是删除索引
list1.remove(new Integer(123));//此处为正确方式
//删除 a 集合中所有 b集合里包含的内容 list1[hello,123,world] list2[hello,123]
list1.remove(list2);//执行后 只剩下 list1[world]
//删除 两个集合中不同的元素
list1.retainAll(list2);
//(6)判断 指定元素在集合中是否存在(返回boolean类型结果 true/false
System.out.println("hello在集合中是否存在:"+list1.contains("hello"));
//判断集合1是否包含集合2全部元素(返回boolean类型结果 true/false
System.out.println("判断集合1是否包含集合2全部元素"+list1.containsAll(list2));
//(7)清空集合内所有元素对象
list1.clear();
//(8)获取指定索引位置上的元素对象
System.out.println("获取索引位置为1的对象"+list1.get(1));
//(9)将指定索引位置上的元素对象设置成新对象
list1.set(1,"java");
//(10)在指定的位置上添加
list1.add(1,"html");
//(11)查找元素在集合中的位置 (左到右第一个元素对象) 没有为-1
list1.indexOf("java");
//(12)遍历集合中所有的内容
//12.1 使用加强for循环去遍历集合中的元素
System.out.println("使用加强for循环去遍历集合中的元素");
for (Object obj : list1) {
System.out.println(obj);
}
//12.2 使用普通for循环遍历
System.out.println("使用普通for循环遍历");
for (int i = 0; i < list1.size(); i++) {
System.out.println(list1.get(i));//get 根据索引去获取对象
}
//12.3 使用迭代器遍历
Iterator ite = list1.iterator(); //正向遍历
while (ite.hasNext()){//判断集合中是否有元素对象
Object obj = ite.next();//自动进行了向上类型转换
System.out.println(obj);
}
System.out.println("使用listIterator()逆向遍历");
ListIterator listIterator = list1.listIterator();
System.out.println("正向遍历");//原理:先看看集合中的元素有那些再进行逆向遍历
System.out.println("在集合开头,后面还有元素吗"+listIterator.hasNext());
System.out.println("在集合开头,前面还有元素吗"+listIterator.hasPrevious());
while (listIterator.hasNext()){
System.out.println(listIterator.next());
}
System.out.println("到达集合末尾,后面还有元素吗"+listIterator.hasNext());
System.out.println("到达集合末尾,前面还有元素吗"+listIterator.hasPrevious());
System.out.println("逆向遍历集合中的元素");
while (listIterator.hasPrevious()){
System.out.println(listIterator.previous());
}
}
}