Collection中常用的方法Iterator (迭代器)containsremove

    xiaoxiao2025-04-22  19

    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);//java.util.LinkedList$ListItr@9e89d68 //调用方法完成迭代 //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

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    最新回复(0)