Java学习笔记之集合(二):List集合的常用方法

来源:互联网 发布:网络动作游戏排行榜 编辑:程序博客网 时间:2024/06/07 11:36
package com.collection.list;import java.util.ArrayList;import java.util.List;import java.util.ListIterator;import org.junit.Test;/*集合的体系:--------| Collection: 单列集合的根接口-----------| List:实现了List接口的集合类,具备的特点:有序,可重复;-----------| Set:实现了Set接口的集合类,具备的特点:无序,不可重复; 有序:集合的有序不是指自然顺序,而是指添加进去的顺序与元素出来的顺序是一致的;  List接口中特有方法:添加:add(int index, E element):把元素添加到集合的指定位置;addAll(int index, Collection<? extends E> c):把另一个集合中的所有元素插入到当前集合指定的位置上; 获取:get(int index):根据索引值查找集合中的元素; indexOf(Object o): 查找指定元素第一次在集合中出现的索引值;lastIndexOf(Object o):查找指定元素最后一次出现在集合中的索引值; subList(int fromIndex, int toIndex):根据开始和结束的索引值,截取集合中的元素; 修改:set(int index, E element):使用指定的元素替换指定索引值位置的元素;List接口中特有的方法具备的特点:操作的方法都存在索引值;迭代:listIterator():返回一个ListIterator迭代器;ListIterator特有的方法:hasPrevious():判断是否存在上一个元素;previous():获取上一个元素;当前指针先向上移动一个单位,然后再取出当前指向的元素;(先移再取)(next():先取出当前指针指向的元素,然后指针再向下移动一个单位;(先取再移))add(E e):把指定元素插入到当前指针指向的位置上;set(E e):用指定元素替代迭代器最后一次返回的元素;使用迭代器注意事项:在迭代器迭代元素的过程中,不允许使用集合的对象改变集合中元素的个数;如果想添加或者删除,只能通过迭代器的方法来实现;如果使用集合对象改变集合中的元素个数,就会出现异常ConcurrentModificationException;迭代元素的过程中:是指迭代器被创建开始,到迭代器使用结束的时间内; */public class Demo2 {// 添加方法@SuppressWarnings({ "rawtypes", "unchecked" })@Testpublic void test1(){List list = new ArrayList();list.add("张三");// 把元素添加到集合的末尾处;list.add("李四");list.add("王五");list.add("赵六");list.add("赵六"); // 元素可重复;list.add("张三");list.add(1, "张果老");// 把元素添加到集合中指定索引值的位置上,索引值从0开始;System.out.println("集合中的元素:" + list); // 输出顺序和添加顺序一致,并且元素可重复;System.out.println("-----------------");List list2 = new ArrayList();list2.add("何仙姑");list2.add("吕洞宾");//list.addAll(list2); // 将list2集合中的所有元素添加到list集合的末尾处;list.addAll(4, list2);// 将list2集合中的所有元素添加到list集合中指定索引值的位置; System.out.println("集合中的元素:" + list);}// 获取方法@SuppressWarnings({ "rawtypes", "unchecked" })@Testpublic void test2(){List list = new ArrayList();list.add("张三");list.add("李四");list.add("王五");list.add("张三");System.out.println("获取集合中索引值为2的元素:" + list.get(2)); // 索引从0开始// 使用get()方法遍历集合中的元素;for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}System.out.println("---------------");// 查找指定元素在集合中第一次出现的索引值;如果元素不存在,则返回-1;System.out.println("查找指定元素在集合中第一次出现的索引值:" + list.indexOf("张三"));// 0System.out.println("查找指定元素在集合中最后一次出现的索引值:" + list.lastIndexOf("张三"));// 3System.out.println("---------------");// 根据开始和结束的索引值,截取集合中的元素;// 注意:截取的元素包括开始索引值的元素,不包括结束索引值的元素;(包头不包尾)List subList = list.subList(1, 3);System.out.println("截取集合中的元素:" + subList);}// 修改方法@SuppressWarnings({ "rawtypes", "unchecked" })@Testpublic void test3(){List list = new ArrayList();list.add("张三");list.add("李四");list.add("王五");System.out.println("集合中的元素:" + list);// 使用指定的元素修改指定索引值位置的元素;list.set(1, "李世民");System.out.println("修改之后集合中的元素:" + list);}// 迭代方法@SuppressWarnings({ "rawtypes", "unchecked" })@Testpublic void test4(){List list = new ArrayList();list.add("张三");list.add("李四");list.add("王五");ListIterator it = list.listIterator();System.out.println("有上一个元素吗?" + it.hasPrevious()); // false//System.out.println("获取上一个元素:" + it.previous()); // java.util.NoSuchElementExceptionSystem.out.println("---------------");//while (it.hasNext()){//it.next();//System.out.println("元素:" + it.previous()); // 无限死循环,取出的元素是"张三";//}System.out.println("---------------");while (it.hasNext()){it.next(); // 循环结束指针指向最后一个元素的后面;}while (it.hasPrevious()){System.out.println("元素:" + it.previous()); // 倒着取出所有元素;}System.out.println("---------------");ListIterator it2 = list.listIterator();it2.add("冯二"); // 将元素插入到集合的最前面;System.out.println("集合中的元素:" + list);ListIterator it3 = list.listIterator();it3.next();it3.next();it3.add("陈一");// 由于前面指针下移了两个位置,所以此处元素将插入到集合的第三位置上;System.out.println("集合中的元素:" + list);System.out.println("---------------");ListIterator it4 = list.listIterator();//it4.set("老铁");// 由于此处迭代器还没有返回元素,所以不可以替代元素,会出现异常;it4.next();it4.next();// 由于迭代器下移了两次,所以此处迭代器返回的是第二个元素;it4.set("老铁"); // 那么此处替换的就是迭代器返回的第二个元素;System.out.println("集合中的元素:" + list);}// 使用迭代器的注意事项:@SuppressWarnings({ "rawtypes", "unchecked" })@Testpublic void test5(){List list = new ArrayList();list.add("张三");list.add("李四");list.add("王五");ListIterator it = list.listIterator();while (it.hasNext()){System.out.println(it.next());/*此处虽然能够将元素添加到集合中,但是遍历的时候却不能遍历出来,是为什么?因为从add()方法的源码可以看出:public void add(E e) {            checkForComodification();            try {                int i = cursor;                ArrayList.this.add(i, e);                cursor = i + 1;                lastRet = -1;                expectedModCount = modCount;            } catch (IndexOutOfBoundsException ex) {                throw new ConcurrentModificationException();            }        }        当调用迭代器的add()方法时,指针(cursor)会往下移动一个单位,所以遍历的时候会跳过新添加的元素; */it.add("田七"); // 此处添加元素会出现异常ConcurrentModificationException;//list.add("赵六");}System.out.println("集合中的元素:" + list);System.out.println("-------------");// 迭代器迭代元素的过程中:ListIterator it2 = list.listIterator();//list.add("aa"); // 此处同样会报错,因为下面迭代器继续在使用;it2.next();list.add("bb");// 此处就不会报错,因为下面没有迭代器的使用了,即迭代器使用结束了;}}

原创粉丝点击