LinkedList学习笔记——有条件的筛选链表中的元素

在java程序设计语言中,所有链表实际上都是双向链接的——即每个节点存放着指向前驱动的引用。与数组不同的是,从链表中删除一个元素是一个很轻松的操作,即需要对被删除元素附近的节点更新即可。

//自己定义一个Name类
class Name implements Comparable<Name>{
    private String name;
    public Name(String name) {
        // TODO Auto-generated constructor stub
        this.name=name;
    }

    public String getName(){
        return name;
    }

    public String toString(){
        return name+" ";
    }

    public boolean equals(Name n){
        return name.equals(n.getName()); 
    }

    public int hashCode(){
        return name.hashCode();
    }

    @Override
    public int compareTo(Name o) {
        // TODO Auto-generated method stub
        return name.compareTo(o.name);
    }
}

public class Test {

    public Test() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Name> linkList=new LinkedList<Name>();

        Name n1=new Name("张三");
        Name n2=new Name("李四");
        Name n3=new Name("王五");
        Name n4=new Name("赵六");
        linkList.add(n1);
        linkList.add(n2);
        linkList.add(n3);
        linkList.add(n4);
        System.out.println(linkList);

        //LinkedList中的remove()方法,Name类不知道该怎么判定什么时候相等,所以要重写equals()和hashCode(),不然remove()无法产生效果
        linkList.remove(n4);//一定要重写equals()和hashCode()方法
        System.out.println(linkList);


        for(Iterator<Name> s=linkList.iterator();s.hasNext();){

            Name na=(Name)s.next();
            if(na.getName().equals("张三")){//因为是通过getName()方法获取的,所以不需要重写equals()和hashCode()方法也能比较
            s.remove();//满足条件则,删除
            }
        }
        System.out.println(linkList);
    }
}

控制台输出

[张三 , 李四 , 王五 , 赵六 ]
[张三 , 李四 , 王五 ]
[李四 , 王五 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值