在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);
}
}
控制台输出
[张三 , 李四 , 王五 , 赵六 ]
[张三 , 李四 , 王五 ]
[李四 , 王五 ]