Java笔记

来源:互联网 发布:linux培训多少钱 编辑:程序博客网 时间:2024/05/22 05:20

集合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():返回列表中的前一个元素

0 0