实现不用循环,删除集合中的重复(任意)元素

来源:互联网 发布:树木每年被砍伐的数据 编辑:程序博客网 时间:2024/06/04 18:25
package cn.huizhi.tool;import java.util.ArrayList;import java.util.List;/** *  * @author hubiao * @version 1.0 * @time 2013-12-26 *  *       实现任意删除集合 中的对象  *       已知:list中有4个学生对象, *        要求:把list中姓名中带有    “张” 的 学生删除。(不能采用循环、迭代实现) *     思路: *       1:采用list提供的contains()判断,而contains底层使用是equest。为了让我们以姓名条件判断,则需要重写equest方法。 *       2:在学生类中重写equest方法,如果姓名为null或""则返回true *       3:如果返回true,则执行remove删除。 *    ----------------    *    通过ArrayList源代码。发现contains底层还是依赖了循环..... *       public boolean contains(Object o) {return indexOf(o) >= 0;    }public int indexOf(Object o) {if (o == null) {    for (int i = 0; i < size; i++)if (elementData[i]==null)    return i;} else {    for (int i = 0; i < size; i++)if (o.equals(elementData[i]))   return i;}*/public class ListDemo {public static void main(String[] args) {//list中有4个学生对象List<Person> arr=  new ArrayList<Person>();Person p1 = new Person(1l,"小张");Person p2 = new Person(2l,"小李");Person p3 = new Person(3l,"李四");Person p4 = new Person(4l,"张三丰");arr.add(p1);arr.add(p2);arr.add(p3);arr.add(p4);//组织条件Person p = new Person(1,"张");if(arr.contains(p)){arr.remove(p);}//执行完后结果:[Person [id=1, name=小张, age=null], Person [id=2, name=小李, age=null], Person [id=3, name=李四, age=null]]System.out.println(arr);}}-----------------Person中重写eqeust方法----------------//obj其时也是底层集合中循环的对象。public boolean equals(Object obj) {//传递的对象为null或不是学生对象,直接返回falseif(obj==null || !(obj instanceof Person)) return false;//向下转型:利于直接判断Person p = (Person) obj;//判断是否满足条件return p.getName().contains(this.name);//this对象是我们定义的条件对象,p是集合中的对象} 


 

0 0
原创粉丝点击