1.1List所代表的是有序的的Collection
1.它用某种特定的插入顺序来维护元素顺序,同时可以根据元素的整数索引(在列表中的位置,和数组相似,从0开始,到元素个数-1)访问元素,并检索列表中的元素
2. List由于列表有序并存在索引,因此除了增强for循环进行遍历外,还可以使用普通的for循环进行遍历
1.2List的常见实现类
1.2.1ArrayList
1.2.1.1构造方法
1.2.1.2特点:
1.底层实现:数组(不限制数量添加元素,底层动态扩缩容数组)
2.查找快,添加和删除慢(数组根据索引查找时间复杂度O(1),添加和删除ArrayList需要扩缩容)
3.创建ArrayList对象, 如果使用无参构造,创建的是空列表, 在添加第一个元素的时候,容量才初始化为10
4.存储数据当快溢出时,就会进行扩容操作ArrayList的默认扩容扩展后数组大小为:原数组长度+(原数组长度>>1)
5.可以添加重复元素
6.ArrayList是一个非线程安全的列表(非同步)
package List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ArrayListTest {
public static void main(String[] args) {
//接口编程
//构造方法一,给定容量
// List<String> list =new ArrayList<>(20);
//无参构造方法,容量是空,当添加第一个元素时,容量是10
List<String> list =new ArrayList<>();
// list.size()//元素数量
System.out.println(list.size());//0
list.add("刘备");
list.add("关羽");
list.add("张飞");
System.out.println(list.size());//0
System.out.println("---------------list.get(1)");
System.out.println(list.get(1));//关羽
System.out.println("---------------list.contains(\"关羽\")-------------");
System.out.println(list.contains("关羽"));//true
System.out.println("-------------------------");
list.set(1,"关二哥");//修改
System.out.println(list.get(1));//关二哥
System.out.println("-------------------------");
list.add(1,"赵云");//在指定位置插入元素
System.out.println(list.get(1));//赵云
System.out.println("------------------fori遍历列表");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("--------------list.remove");
System.out.println(list.remove(1));//按照索引删返回是删除的对象
// System.out.println(list.remove("赵云"));//按照对象删返回是Boolean值
System.out.println("------------------fori遍历列表");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("--------------增强for循环遍历");
for(String s:list){
System.out.println(s);
}
List<String> list1=new ArrayList<>();
list1.add("黄忠");
list1.add("姜维");
list.addAll(list1);
System.out.println("-----------------迭代器遍历");
//获取迭代器
Iterator<String> iterator=list.iterator();
// iterator.hasNext() 返回boolean值,是否有下一个元素
while(iterator.hasNext()){
//获取下一个元素 要迭代器遍历,一定要调用next方法,保证游标移动,如果游标不移动 iterator.hasNext() 永远是true
System.out.println(iterator.next());
}
System.out.println("--------list.subList()---------");
List<String> list3=list.subList(1,3);
for (String s:list3){
System.out.println(s);
}
System.out.println("-----------遍历列表过程删除数据-------------");
// for(String s:list){ 增强for循环不能一边遍历一边删除
// System.out.println(s);
// list.remove(s);
// }
int size=list.size();
System.out.println("删除元素之前的数量:"+list.size());
// for (int i = 0; i < size; i++) {
// System.out.println(list.get(0));
// list.remove(0);
// }
for (int i = list.size()-1; i >= 0; i--) {
System.out.println(list.get(i));
list.remove(i);
}
System.out.println("删除元素之后的数量:"+list.size());
System.out.println("----------------迭代器删除");
System.out.println("删除元素之前的数量:"+list1.size());
Iterator <String> iterator1=list1.iterator();
while(iterator1.hasNext()){
String next =iterator1.next();
System.out.println(next);
iterator1.remove();
}
System.out.println("删除元素之后的数量:"+list1.size());
}
}