一道比较简单的java面试题,一个list中存放string,例如存放人名,而且这个list的size比较大,现在要求去除该list中的名字为姓“张”的所有元素,至今没有想到很好的方法,自己只知道三种方法,求大神给予更好的答案,性能越高越好,谢谢~
import java.util.ArrayList; import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.List; import java.util.Random; import org.junit.Before; public class ModifyList { public List<String> lists=null; String[] prefixName = new String[]{"赵","钱","孙","李","张","陈"}; String[] suffixName = new String[]{"子涵","心怡","子墨","梦瑶","浩轩","轩","俊熙","可馨","睿","思彤","思诚","丹"}; @Before public void before(){ lists=new ArrayList<String>(); Random random=new Random(); int i=0; while(i<50000){ int prefix=random.nextInt(6); int suffix=random.nextInt(12); String name=prefixName[prefix]+suffixName[suffix]; lists.add(name); i++; } } @org.junit.Test(expected=ConcurrentModificationException.class) public void remove1(){ for(String name:lists){ if(name!=null&name.indexOf("张")>-1){ lists.remove(name); } } System.out.println(lists); } /** * 该方法适用于去除唯一一个不合适的值,效率最高 */ @org.junit.Test public void remove2(){ for(String name:lists){ if(name!=null&name.indexOf("张")>-1){ lists.remove(name); break; } } System.out.println(lists); } /** * 该方法没有报错,因为每次都去获取lists.size * 不会抛出ConcurrentModificationException异常 * 但如果连续的list中有连续的姓张的在一起,就会出现不删除现象 * 当i=0时,删除“张三”,此时“张九”的下标变为0,i=1,此时就不会对“张九”做处理 */ @org.junit.Test public void remove3(){ for(int i=0;i<lists.size();i++){ if(lists.get(i)!=null&lists.get(i).indexOf("张")>-1){ lists.remove(i); } } System.out.println(lists); } /** * 正确方法一 */ @org.junit.Test public void remove4(){ long begin=System.currentTimeMillis(); System.out.println(begin); Iterator<String> iters = lists.iterator(); while(iters.hasNext()){ String name=iters.next(); if(name!=null&name.indexOf("张")>-1){ iters.remove(); } } long end=System.currentTimeMillis(); System.out.println(end); System.out.println(end-begin); /*System.out.println(lists);*/ } /** * 正确方法二 */ @org.junit.Test public void remove5(){ long begin=System.currentTimeMillis(); System.out.println(begin); for(int i=0;i<lists.size();i++){ if(lists.get(i)!=null&lists.get(i).indexOf("张")>-1){ lists.remove(i); i--; } } long end=System.currentTimeMillis(); System.out.println(end); System.out.println(end-begin); //System.out.println(lists); } /** * 正确方法三,效率最高,其实不算去除 */ @org.junit.Test public void remove6(){ List<String> list2=new ArrayList<String>(); long begin=System.currentTimeMillis(); System.out.println(begin); for(String name:lists){ if(name!=null&name.indexOf("张")<0){ list2.add(name); } } long end=System.currentTimeMillis(); System.out.println(end); System.out.println(end-begin); //System.out.println(list2); } }
相关推荐
65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...
数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? 要掌握Collection相关的接口和类的使用 56.使用StringBuffer类与String类进行字符串连接时有何区别? 57.调用Thread类的...
65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...
超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...
65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...
各种java面试题集,面试前必备哦, 1. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套...
这个资源不太新,但是,对于...65、去掉一个Vector集合中重复的元素 2 66、Collection 和 Collections的区别。 2 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 2
65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...
65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...
65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...
65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类都...
65、去掉一个Vector集合中重复的元素 46 66、Collection 和 Collections的区别。 47 67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 47 68、你所知道的集合类...
java猜数字源码 Android面试整理 阿里巴巴 LRUCache原理 答: 图片加载原理 模块化实现(好处,原因) JVM 视频加密传输 统计启动时长,标准 答: 如何保持应用的稳定性 ThreadLocal 原理 答: 谈谈classloader 答...
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? ...... 7 2、Java 有没有 goto? .......................................................................................................