/*
boolean remove(Object o)
remove和contains方法都想需要集合中的元素重写equals方法
因为Object中的equals方法比较的是内存地址,在现实的业务逻辑当中
不能比较内存地址,应该比较内容
*/
import java.util.*;
public class fuck5{
public static void main(String[] main){
//1.创建集合
Collection c=new LinkedList();
//2.创建Integer类型的对象
Integer i1=new Integer(10);
//3.添加元素
c.add(i1);
System.out.println(c.contains(i1));
Integer i2=new Integer(10);
c.remove(i2);
System.out.println(c.size());//o
manager m1=new manager(11,"jack");
c.add(m1);
manager m2=new manager(11,"jack");
c.remove(m2);
System.out.println(c.size());//0
//我原来以为这里不需要重写equals方法
//现在意识到只有重写equals方法,m1和m2才是真正意义上的等同
}
}
class manager{
int num;
String name;
manager(int num,String name){
this.num=num;
this.name=name;
}
public boolean equals(Object o){
if(this==o) return true;
if(o instanceof manager){
manager m=(manager) o;
if(m.num==this.num&&m.name.equals(this.name)){
return true;
}
}
return false;
}
boolean remove(Object o)
remove和contains方法都想需要集合中的元素重写equals方法
因为Object中的equals方法比较的是内存地址,在现实的业务逻辑当中
不能比较内存地址,应该比较内容
*/
import java.util.*;
public class fuck5{
public static void main(String[] main){
//1.创建集合
Collection c=new LinkedList();
//2.创建Integer类型的对象
Integer i1=new Integer(10);
//3.添加元素
c.add(i1);
System.out.println(c.contains(i1));
Integer i2=new Integer(10);
c.remove(i2);
System.out.println(c.size());//o
manager m1=new manager(11,"jack");
c.add(m1);
manager m2=new manager(11,"jack");
c.remove(m2);
System.out.println(c.size());//0
//我原来以为这里不需要重写equals方法
//现在意识到只有重写equals方法,m1和m2才是真正意义上的等同
}
}
class manager{
int num;
String name;
manager(int num,String name){
this.num=num;
this.name=name;
}
public boolean equals(Object o){
if(this==o) return true;
if(o instanceof manager){
manager m=(manager) o;
if(m.num==this.num&&m.name.equals(this.name)){
return true;
}
}
return false;
}
}
/*
深入remove方法
1.迭代器的remove方法
2.集合自身的remove()方法
*/
import java.util.*;
public class fuck6{
public static void main(String[] args){
Collection c=new LinkedList();
c.add(1);
c.add(2);
c.add(3);
Iterator it=c.iterator();
//建议使用这种方法
/*这是通过迭代器删除
while(it.hasNext()){
it.next();
it.remove();
}*/
//用集合带有的remove方法删除
//会报错误
//因为你用集合的remove方法删除后需要重新获取迭代器
//
/*while(it.hasNext()){
Object o1=it.next();
c.remove(o1);
}*/
System.out.println(c.size());//0
}
}