Java学习笔记之集合(二):List集合的常用方法
2017-09-20 16:17
351 查看
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" }) @Test public 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" }) @Test public void test2( 4000 ){ 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("张三"));// 0 System.out.println("查找指定元素在集合中最后一次出现的索引值:" + list.lastIndexOf("张三"));// 3 System.out.println("---------------"); // 根据开始和结束的索引值,截取集合中的元素; // 注意:截取的元素包括开始索引值的元素,不包括结束索引值的元素;(包头不包尾) List subList = list.subList(1, 3); System.out.println("截取集合中的元素:" + subList); } // 修改方法 @SuppressWarnings({ "rawtypes", "unchecked" }) @Test public 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" }) @Test public 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.NoSuchElementException System.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" }) @Test public 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"); // 此处就不会报错,因为下面没有迭代器的使用了,即迭代器使用结束了; } }
相关文章推荐
- Java学习笔记之集合(四):LinkedList集合的特点和常用方法
- 学习笔记_毕向东 Java_集合框架_LinkedList 2014.7.22
- JAVA学习笔记(二十)- 集合 List
- Java学习笔记List集合
- 学习笔记-java基本类型的包装类,常用方法
- java常用方法集合 java的常用的方法这个可以学习下
- java学习笔记(六)——String类的常用方法
- JAVA学习第三十八课(常用对象API— Map集合及其常用方法
- java毕向东听课笔记22(集合框架-List集合共性方法)
- Java常用集合类的常用方法 学习笔记
- Java学习笔记(37)----------List集合
- Java集合源码学习笔记(三)LinkedList分析
- Java学习笔记之常用方法类(二) StringBuffer类、StringTokenizenizer类、Sanner类
- 黑马程序员----Java集合框架学习笔记1-List 与Set
- Java学习笔记44:常用集合使用
- 13. Java类集 Part 1(类集、Collection接口、List接口、Set接口、SortedSet接口、集合的输出) ----- 学习笔记
- Python学习笔记——list的常用方法
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与LinkedHashSet类))
- JAVA学习笔记21——多维数组+数组常用方法
- 黑马程序员-List集合共性方法,ListIterator学习笔记