关于list中移除某种数据类型的方法

众所周知,list在不泛型的情况下是可以存放各种数据类型的,代码如下:

1   public static void main(String[] args) {
2         List list=new ArrayList<>();
3         list.add("我是字符串");
4         list.add(123);
5         list.add(new HashMap<>());
6         System.out.println(list);
7   }

可以得到控制台的输出结果是:

[我是字符串, 123, {}]

 

而关于list移除数据的方法,很容易百度到,例如:

 1   public static void main(String[] args) {
 2          List list=new ArrayList<>();
 3          list.add("我是字符串");
 4          list.add(123);
 5          list.add(new HashMap<>());
 6          System.out.println(list);
7 list.remove(0);//根据下标移除 8 System.out.println(list); 9 list.remove(Integer.valueOf(123));//根据元素内容进行移除 10 System.out.println(list); 11   }

可以得到控制台的输出结果是:

[我是字符串, 123, {}]
[123, {}]
[{}]

 

而我们本次是根据数据类型进行移除list中的元素,此时是不无法确定下标或元素值的,因此使用Iterator,代码如下:

 1     public static void main(String[] args) {
 2         List list=new ArrayList<>();
 3         list.add("我是字符串");
 4         list.add(123);
 5         list.add(new HashMap<>());
 6         System.out.println(list);
7 delData(list, HashMap.class); 8 System.out.println(list); 9 delData(list, "我是字符串".getClass()); 10 System.out.println(list); 11 } 12 13 /** 14 * list清除某种类型数据 15 * @param list list本体 16 * @param classObj 要清除的数据类型 17 */ 18 public static void delData(List list,Class classObj){ 19 Iterator<Object> it=list.iterator(); 20 while (it.hasNext()) { 21 if (classObj==it.next().getClass()) { 22 it.remove(); 23 } 24 } 25 }

可以得到控制台的输出结果是:

[我是字符串, 123, {}]
[我是字符串, 123]
[123]

 

最后,惯例写下一些题外话,我这次问题也是在工作中遇到的,本身其实很简单,只是想直接百度偷懒下去复制粘贴,结果几分钟了没找到类似的答案,所以就顺便写下了,说不定能帮到其他的想偷懒的,或者刚入行的java新手呢。

再另外,说一句,list移除元素后(不管哪种方式移除),下标是动态直接变的,即后面的元素直接前移的,此时如果涉及到list下标进行操作的就要注意了(当年的我就是。。。说不定能帮到陷入此坑的初学者)

 

posted @ 2018-06-01 11:06  咸鱼老李  阅读(1241)  评论(0编辑  收藏  举报