这里占用点地方记录LIst接口的几个常用方法:
List接口:
void add(int index, E element)
boolean remove(Object o);
boolean contains(Object o)
E get(int index)
E set(int index, E element)
直接上代码
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.*;
@RunWith(SpringJUnit4ClassRunner.class) //更改junit的运行期,不要直接去找junit,而是先找spring-test,test模块才能拿到容器
@ContextConfiguration("classpath:applicationContext.xml") //告知spring的配置文件
public class CollectionTest {
@Test
public void testListRemove0(){
List<String> strings = new ArrayList<>();
strings.add("科比");
strings.add("韦德");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("博士");
strings.add("詹姆士");
System.out.println(strings);
//删除方式0: 使用增强for
try {
for (String s : strings){
if ("詹姆士".equals(s)){
strings.remove(s);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println(strings); //事实上会报ConcurrentModificationException异常
// [科比, 韦德, 詹姆士, 詹姆士, 博士, 詹姆士]
}
}
@Test
public void testListRemove1(){
List<String> strings = new ArrayList<>();
strings.add("科比");
strings.add("韦德");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("博士");
strings.add("詹姆士");
System.out.println(strings);
//删除方法1:
try {
Iterator<String> iterator = strings.iterator();
while(iterator.hasNext()){
String next = iterator.next();
if ("詹姆士".equals(next)){ //才不会运行师报空指针异常
strings.remove(next);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println(strings); //事实上会出现ConcurrentModificationException:并发修改异常,
// [科比, 韦德, 詹姆士, 詹姆士, 博士, 詹姆士] , 说明在remove第二个"詹姆士"的时候就会报这个concurrentmodificationException
}
}
@Test
public void testListRemove2(){
List<String> strings = new ArrayList<>();
strings.add("科比");
strings.add("韦德");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("博士");
strings.add("詹姆士");
System.out.println(strings);
//删除方法2:使用迭代器删除
Iterator<String> iterator = strings.iterator();
while(iterator.hasNext()){
String next = iterator.next();
if ("詹姆士".equals(next)){
iterator.remove();
}
}
System.out.println(strings); //[科比, 韦德, 博士], 说明删除成功
}
@Test
public void testListRemove3(){
List<String> strings = new ArrayList<>();
strings.add("科比");
strings.add("韦德");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("博士");
strings.add("詹姆士");
System.out.println(strings);
//删除方法2:判断之后再删除
while(strings.contains("詹姆士")){
strings.remove("詹姆士");
}
System.out.println(strings);//[科比, 韦德, 博士], 说明删除成功
}
@Test
public void testListRemove4(){
List<String> strings = new ArrayList<>();
strings.add("科比");
strings.add("韦德");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("博士");
strings.add("詹姆士");
System.out.println(strings);
//删除方法4: 倒循环删除
for (int i = strings.size()-1; i >= 0; i--){
String s = strings.get(i);
if ("詹姆士".equals(s)){
strings.remove(s);
}
}
System.out.println(strings);//[科比, 韦德, 博士], 说明删除成功
}
@Test
public void testListRemove5(){
List<String> strings = new ArrayList<>();
strings.add("科比");
strings.add("韦德");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("詹姆士");
strings.add("博士");
strings.add("詹姆士");
System.out.println(strings);
//删除方法5: 循环时如果命中目标下标不动
for (int i = 0; i < strings.size(); i++){
String s = strings.get(i);
if ("詹姆士".equals(s)){
strings.remove(s);
i--;
}
}
System.out.println(strings);//[科比, 韦德, 博士], 说明删除成功
}
}