List接口常用方法【熟悉】
package edu.tjdz.javaSE.collection;
import java.util.*;
/*
测试List接口中的常用方法
1、List集合存储元素特点:有序可重复
有序:List集合中元素由下标。
从0开始,以1递增。
可重复:存储一个1,还可以在存储一个1.
2、List即是Collection接口中的子接口,那么肯定List接口有自己“特色”的方法:
以下只列出List特有的常用的方法
void add(int index, E element) 在列表的指定位置添加元素(第一个参数是下标)
Object get(int index) 根据下标获取元素(元素的下标,从0开始,以1递增)
int indexOf(Object o) //获取指定对象第一次出现的索引
int lastIndexOf(Object o) //获取指定对象最后一次出现的索引
Object remove(int index) //删除指定下标位置的元素
Object set(int index, Object element) //修改指定位置元素(元素下标,修改的值)
*/
public class CollectionTest07 {
public static void main(String[] args) {
//创建List集合
//List myList = new LinkedList();
//List myList = new Vector();
List myList = new ArrayList();
//添加元素
myList.add("A"); //默认都是向集合尾部添加元素
myList.add("B");
myList.add("C");
myList.add("D");
myList.add("A");
//在列表的指定位置添加元素(第一个参数是下标)
//这个方法使用不多,因为对于ArrayList集合来说,效率较低(因为ArrayLIst底层是数组,添加的时候会涉及到元素位移的问题)
myList.add(1,"KING");
//迭代
Iterator it = myList.iterator();
while(it.hasNext()){
Object elt = it.next();
System.out.println(elt);
}
System.out.println("------------------------------");
//根据下标
Object firstobj = myList.get(0);
System.out.println(firstobj); //A
//因为有下标,所以List集合有自己特殊的遍历方式
//根据下标遍历【List集合特有的方式,Set没有。】
for(int i=0;i<myList.size();i++){
Object obj = myList.get(i);
System.out.println(obj);
}
//获取指定对象第一次出现的索引
System.out.println(myList.indexOf("KING")); //1
//获取指定独享最后一次出现处的索引
System.out.println(myList.lastIndexOf("A")); //5
//删除指定下标位置的元素
myList.remove(0);
System.out.println(myList.size()); //5
System.out.println("================================");
//修改指定位置元素
myList.set(0,"Soft");
//遍历集合
for(int i=0;i<myList.size();i++){
Object obj = myList.get(i);
System.out.println(obj);
}
}
}
**关于集合元素的remove方法
package edu.tjdz.javaSE.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
关于集合元素的remove
重点:当集合的结构发生改变时,迭代器对象必须重新获取,如果还是以前老的迭代器,
会出现异常:java.util.ConcurrentModificationException
重点:在迭代集合元素的过程中,不能调用集合对象的remove()方法,删除元素:
c.remove(o); 迭代过程中不能这样
会出现:java.util.ConcurrentModificationException
重点:在迭代元素的过程当中,一定要使用迭代器Iterator的remove方法,删除元素,
不要使用集合中自带的remove方法删除元素。
*/
public class CollectionTest06 {
public static void main(String[] args) {
//创建集合
Collection c = new ArrayList();
// 获取迭代器
//注意:此时获取的迭代器是,指向的是那个集合中没有元素状态下的迭代器。
// 一定要注意:集合结构只要发生改变,迭代器对象必须重新获取。
// 当集合结构发生改变,迭代器没有重新获取时,调用next()方法:java.util.ConcurrentModificationException
//Iterator it = c.iterator();
// 添加元素
c.add(1);
c.add(2);
c.add(3);
// 获取迭代器
Iterator it = c.iterator();
while(it.hasNext()){
//编写代码时next()方法返回类型必须是Object
Object obj = it.next();
if(obj instanceof Integer){
System.out.println("Integer类型");
}
System.out.println(obj);
}
Collection c2 = new ArrayList();
c2.add("abc");
c2.add("def");
c2.add("xyz");
Iterator it2 = c2.iterator();
while(it2.hasNext()){
Object o = it2.next();
//删除元素
//删除元素之后,集合元素发生了变化,应该重新去获得迭代器
//但是,循环下一次的时候,并没有重新获取迭代器,所以会出现异常:java.util.ConcurrentModificationException
//c2.remove(o); //直接通过集合去删除,没有通知迭代器。(导致迭代器的快照和元集合状态不同。)
//使用迭代器来删除可以吗?
//迭代器去删除时,会自动更新迭代器,并且更新集合(删除集合中的元素)。
it2.remove(); //删除的一定是迭代器指向的当前元素。
System.out.println(o);
}
System.out.println(c2.size());
}
}
版权声明:本文为qq_54864699原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。