. List接口中存储数据的特点:用于存储有序的、可以重复的数据。---> 使用List替代数组,"动态"数组 2. List中的常用方法: 第1波:Collection中声明的15个方法。 第2波:因为List是有序的,进而就有索引,进而就会增加一些针对索引操作的方法。 - 插入元素 - `void add(int index, Object ele)`:在index位置插入ele元素 - boolean addAll(int index, Collection eles):从index位置开始将eles中的所有元素添加进来 - 获取元素 - `Object get(int index)`:获取指定index位置的元素 - List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合 - 获取元素索引 - int indexOf(Object obj):返回obj在集合中首次出现的位置 - int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置 - 删除和替换元素 - `Object remove(int index)`:移除指定index位置的元素,并返回此元素 - `Object set(int index, Object ele)`:设置指定index位置的元素为ele 小结: 增 add(Object obj) addAll(Collection coll) 删 remove(Object obj) remove(int index) 改 set(int index, Object ele) 查 get(int index) 插 add(int index, Object ele) addAll(int index, Collection eles) 长度 size() 遍历 iterator() :使用迭代器进行遍历 增强for循环 一般的for循环
/** * ClassName: ListTest * Package: com.atguigu03.list * Description: * * 增 * add(Object obj) * addAll(Collection coll) * 删 * remove(Object obj) * remove(int index) * 改 * set(int index, Object ele) * 查 * get(int index) * 插 * add(int index, Object ele) * addAll(int index, Collection eles) * 长度 * size() * 遍历 * iterator() :使用迭代器进行遍历 * 增强for循环 * 一般的for循环 * * @Author 小白 * @Create 2024/4/10 23:16 * @Version 1.0 */ public class ListTest { @Test public void test1(){ //接口不能创造对象 只能是实现类去创造对象 List:接口 ArrayList: List的实现类 List list = new ArrayList(); /* * 增 * add(Object obj) * addAll(Collection coll)*/ list.add("AA"); list.add(123); list.add("BB"); list.add(new Person("Tom",12)); //这里面的底层用的也是迭代器进行遍历 toString方法在AbstractCollection类中 // 可用Ctrl+H查看继承树 Ctrl+F12 在AbstractCollection类找toString方法 //Ctrl+N可以去找类 //System.out.println(list.toString());//[AA, 123, BB, Person{name='Tom', age=12}] /* 插 * add(int index, Object ele) * addAll(int index, Collection eles)*/ //在集合list中索引为1的位置插入CC list.add(1,"CC"); // System.out.println(list); //[AA, CC, 123, BB, Person{name='Tom', age=12}] //将数组通过 Arrays.asList转成集合 List list1 = Arrays.asList(1, 2, 3); // // list.add(1,list1);//将list1整体作为一个元素,插入到索引为1的位置 //[AA, [1, 2, 3], CC, 123, BB, Person{name='Tom', age=12}] // System.out.println(list); //list.addAll和list.add测试时 不能同时学 不能测试list.addAll的时候 // 因为已经有了list.add添加后结果 //将集合list1的元素1, 2, 3 ;加到list索引为1的位置 其他元素往后移动 list.addAll(1,list1); //[AA, 1, 2, 3, CC, 123, BB, Person{name='Tom', age=12}] System.out.println(list); } @Test public void test2(){ List list = new ArrayList(); list.add("AA"); list.add("BB"); list.add(123); list.add(2);//自动装箱 将基本类型自动转换成引用类型 list.add(new Person("Tom",12)); //把索引为2的元素删除 list.remove(2); System.out.println(list); //[AA, BB, 2, Person{name='Tom', age=12}] //得到索引为2的元素 System.out.println(list.get(2)); //2 //如何删除数据2 //把基本类型转换成包装类 把基本类型2包装成一个对象 就可以删除基本类型的数据2 // (装箱)基本数据类型 ---> (建议)调用包装类的valueOf(xxx xx) //包装类的类型.valueOf(xxx xx) 比如int的包装类是Integer // 那就用Integer.valueOf(xxx xx) 就可以将基本类型int转换成包装类(装箱) list.remove(Integer.valueOf(2)); System.out.println(list); //[AA, BB, Person{name='Tom', age=12}] } @Test public void test3(){ List list = new ArrayList(); list.add("AA"); list.add("BB"); list.add(123); list.add(2);//自动装箱 将基本类型自动转换成引用类型 list.add(new Person("Tom",12)); //遍历方式1:使用迭代器 //创建迭代器对象 Iterator iterator = list.iterator(); //next():①指针下移 ② 将下移以后集合位置上的元素返回 /* 1. `hasNext()`: 用于检查迭代器是否还有下一个元素。 2. `next()`: 用于获取迭代器的下一个元素。 3. `remove()`: 用于从集合中移除迭代器最后访问过的元素。*/ while (iterator.hasNext()){ System.out.println(iterator.next()); } //遍历方式2:培强for循环 for (Object obj : list){ System.out.println(obj); } //遍历方式3:一般的for循环 //size():长度 for (int i = 0; i <list.size() ; i++) { System.out.println(list.get(i)); } } }