Collection中常用的方法 Iterator (迭代器) contains remove
程序员文章站
2023-12-21 14:23:16
...
public static void main(String[] args) {
//创建集合
Collection c = new ArrayList();//多态
c.add(1);//自动装箱
c.add(new Integer(100));
Object o = new Object();
c.add(o);//集合只能单个存储元素,只能存储引用类型
Customer cus = new Customer("aaa",20);
c.add(cus);
System.out.println(c.size());//获取集合的个数
System.out.println(c.isEmpty());//是否为空
//c.clear();//清空元素
System.out.println(c.isEmpty());//是否为空
//将集合转化为Object类型的数组
Object [] objs = c.toArray();
for(int i = 0;i<objs.length;i++) {
System.out.println(objs[i].toString());
}
}
}
class Customer{
String name;
int age;
Customer(String name,int age){
this.name = name;
this.age = age;
}//重写toString
public String toString() {
return "Customer[name = "+name+",age = "+age+"]";
}
}
Iterator 获取集合所依赖的迭代器对象
通过迭代器中的方法完成集合的遍历(这是所有的集合通用的遍历方式)
public static void main(String[] args) {
Collection c = new LinkedList();
c.add(100);
c.add(false);
c.add(11);
//迭代1.获取迭代器对象
//不需要关心底层集合的具体类型,所有集合的迭代器都实现了Java.util.Iterator接口
//Iterator it = c.iterator();//面向接口去编程
//it是一个引用,保存了内存地址,指向堆中的迭代器对象
//System.out.println(it);//[email protected]
//调用方法完成迭代
//while循环
/*while(it.hasNext()) {
Object element = it.next();
System.out.println(element);
}*/
/*
* boolean b = it.hasNext();判断是否有更多的元素,如果有返回true
* Object o = it.next();将迭代器向下移动一位,并取出指向的元素
*
* 原则::调用it.next()方法之前必须调用It.hasnext();
*
*/
for(Iterator it = c.iterator();it.hasNext();) {
Object o = it.next();
System.out.println(o);
}
}
}
boolean contains(Object o)
boolean remove(Object o)
存储在集合中的元素应该去重写equals方法
public class contains {
public static void main(String[] args) {
Collection c = new ArrayList();
Integer i1 = new Integer(10);
c.add(1);
c.add(2);
c.add(3);
c.add(5);
System.out.println(c.contains(i1));
Integer i2 = new Integer(2);
//contains方法底层调用的是equals方法 ,
System.out.println(c.contains(i2));
Manager m1 = new Manager(10,"aok");
c.add(m1);
System.out.println(c.contains(m1));
Manager m2 = new Manager(10,"aok");
System.out.println(c.contains(m2));//false 因为调用的是Object中的toString方法比较得是内存地址,
//true 重写equals方法之后,比较内容
}
}
class Manager{
int no;
String name;
Manager(int no,String name){
this.name = name;
this.no = no;
}
//重写equals方法
public boolean equals (Object o) {
if(this==o) return true;
if(o instanceof Manager) {
Manager m = (Manager)o;//强转
if(m.no==this.no&&m.name.equals(this.name));
return true;
}
return false;
}
}
remove
remove和contains中的方法都需要重写equals方法,因为Object中的equald方法比较的是内存地址,需要改为比较内容的
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
Manager m1 = new Manager(100,"sss");
c.add(m1);
Manager m2 = new Manager(100,"sss");
c.remove(m2);
System.out.println(c.size());//0
迭代器所带的remove方法和集合自身所带的remove方法有什么不同
最好调用迭代器的remove方法
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(1);
c.add(2);
c.add(3);
Iterator it = c.iterator();
while (it.hasNext()) {
it.next();
it.remove(); //通过迭代器删除
/* Object element = it.next();
c.remove(element);//出现问题
*/
}
System.out.println(c.size());//0