Java笔记 - List集合

xiaoxiao2021-02-27  191

集合Collection下面有两大子体系,List和Set,他们都是Collection接口的子接口。 - List:是有序的collection,这里的有序是指存入的顺序(qwer顺序存入,取出顺序也是qwer),所以List接口和它的子类都有索引(角标)。并且List中元素可以重复。 - set:无序的collection,元素不能重复。

List常见方法 List继承了Collection接口,所以Collection接口包含的方法List中都有,但是还有一些List特有的方法,这些方法有一个共性的特点就是可以操作角标。 1. 添加 void add(index, element):在列表的指定位置添加元素 boolean addAll(index, collection):在列表的指定位置添加Collection集合的所有元素。 2. 删除 Object remove(int index):一处列表中指定位置的元素。 3. 修改 E set(int index, E element):用指定元素替换列表中指定位置的元素,返回以前在指定位置的元素 4. 获取 Object get(int index):返回列表中指定位置的元素 int indexOf(Object o):返回列表中第一次出现指定元素的索引,如果此列表不包含指定元素,返回-1 int lastIndexOf(Object o):返回列表中最后一次出现指定元素的索引,如果不包含指定元素,返回-1 List subList(int fromIndex, int toIndex):返回fromIndex(包括)和toIndex(不包括)之间的视图。

例:

//注意:List在java中的java.awt和java.util包中都有这个名字,注意不要导错包 List li = new ArrayList(); li.add("abc1"); li.add("abc2"); li.add("abc3"); li.add("abc4"); System.out.println(li); li.add(1, "abc5"); System.out.println(li); System.out.println(li.remove(1)); System.out.println(li); System.out.println(li.set(1, "abc6")); System.out.println(li); System.out.println("--------------------"); System.out.println(li.get(2)); System.out.println(li.indexOf("abc6")); System.out.println(li.subList(1, 2));

输出结果: [abc1, abc2, abc3, abc4] [abc1, abc5, abc2, abc3, abc4] abc5 [abc1, abc2, abc3, abc4] abc2 [abc1, abc6, abc3, abc4]


abc3 1 [abc6]

ListIterator迭代器 从Collection集合中继承的迭代器Iterator

List li = new ArrayList(); li.add("abc1"); li.add("abc2"); li.add("abc3"); li.add("abc4"); Iterator it = li.iterator(); while(it.hasNext()){ System.out.println(it.next()); }

输出结果: abc1 abc2 abc3 abc4

List集合特有的列表迭代器:ListIterator

//需求:如果迭代到abc2,就添加一个abc9,否则就打印出来 List i = new ArrayList(); i.add("abc1"); i.add("abc2"); i.add("abc3"); i.add("abc4"); Iterator it = i.iterator(); while(it.hasNext()){ Object obj = it.next();//add方法参数是Object类型的,不论传入什么类型的对象,都会类型提升为Object if(obj.equals("abc2")){//使用Object中的equals方法,比较的是字符串常量地址值,字符串常量存在常量池中,如果要使用相同的字符串常量,会直接使用常量池中现有的字符串,不会新建 i.add("abc9"); } else{ System.out.println(obj); } }

输出结果: Exception in thread “main” java.util.ConcurrentModificationException 当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

因为在建立迭代器的时候集合中有4个对象,在使用迭代器过程中调用List集合的add方法增加一个对象,迭代器是不知道的。所以如果想要增加对象,需要使用迭代器来增加,但是Iterator迭代器并没有增加对象的方法,但是ListIterator列表迭代器中包含此方法。修改代码如下:

List i = new ArrayList(); i.add("abc1"); i.add("abc2"); i.add("abc3"); i.add("abc4"); ListIterator li = i.listIterator(); while(li.hasNext()){ Object obj = li.next(); if(obj.equals("abc2")){ li.add("abc9"); } else{ System.out.println(obj); } } System.out.println(i);

输出结果: abc1 abc3 abc4 [abc1, abc2, abc9, abc3, abc4]

boolean hasPrevious():逆向遍历 E previous():返回列表中的前一个元素

转载请注明原文地址: https://www.6miu.com/read-9953.html

最新回复(0)