关系如图
Collection
1、常用方法
boolean contains(Object o); 判断集合中是否包含某个元素
boolean remove(Object o); 删除集合种某个元素
remove和contains方法都需要集合中的元素重写equals方法。因为Object中的equals
方法比较内存地址,在现实的业务逻辑当中不能比较内存地址,比较的是内容存储在
集合中的元素应该去重写equals方法
举个栗子:
class Test {
public static void main(String[] args){
// 创建集合
Collection c = new ArrayList();
// 创建对象
Integer i1 = new Integer(200);
c.add(1);
c.add(4);
c.add(8);
c.add(9);
c.add(i1);
System.out.println(c.contains(i1)); // true
Integer i2 = new Integer(200);
// contains方法底层调用的是equals方法,如果equals返回是true,就是包含
System.out.println(c.contains(i2)); // true
Mangager m1 = new Mangager(100, "jack");
c.add(m1);
Mangager m2 = new Mangager(100, "jack");
System.out.println(c.contains(m2)); // 没重写前 :false
// 重写后 true
}
}
class Mangager{
int no;
String name;
Mangager(int no,String name){
this.no = no;
this.name = name;
}
// 重写equals方法
// 需求规定:如果编号和姓名都是相同,则表示同一个Manager
public boolean equals(Object o) {
if(this == o) {return true;} // 内存地址相同,即是同一个对象
if(o instanceof Mangager) {
Mangager m = (Mangager)o;
if(m.no == this.no && m.name.equals(this.name)) {
return true;
}
}
return false;
}
}
再举个栗子:
class Test {
public static void main(String[] args){
// 创建集合对象
Collection c = new ArrayList();
// 创建对象
Integer i1 = new Integer(10);
c.add(i1);
Integer i2 = new Integer(10);
c.remove(i2);
System.out.println(c.size()); // 0
Mangager m1 = new Mangager(100,"hl");
Mangager m2 = new Mangager(100,"hl");
c.add(m1);
c.remove(m2);
System.out.println(c.size()); // 0 我们已经重写了equals方法
}
}
class Mangager{
int no;
String name;
Mangager(int no,String name){
this.no = no;
this.name = name;
}
// 重写equals方法
// 需求规定:如果编号和姓名都是相同,则表示同一个Manager
public boolean equals(Object o) {
if(this == o) {return true;} // 内存地址相同,即是同一个对象
if(o instanceof Mangager) {
Mangager m = (Mangager)o;
if(m.no == this.no && m.name.equals(this.name)) {
return true;
}
}
return false;
}
2、深入remove方法
1、迭代器的remove
2、集合自身带的remove方法
举个栗子:
class Test {
public static void main(String[] args){
Collection c = new ArrayList();
c.add(1);
c.add(2);
c.add(3);
java.util.Iterator it = c.iterator();
while (it.hasNext()) {
/* 推荐使用第一种
删除:方法一*/
it.next();
it.remove();
// 删除:方法二 报错
/*Object element = it.next();
c.remove(element);*/
}
System.out.println(c.size());
}
}