java利用AbstractCollection实现自己的可迭代集合类

时间:2021-03-19 17:03:04

Colllection是  java.uitl包中所有集合类的一个根接口..  所以我们可以通过实现Collection接口来实现自己的集合类..

不过由于Collection接口 方法太多.. 于是JDK提供了AbstractCollection抽象类...

这个类是Collection的一个骨干..即为我们提供了Collection的大量实现..我们只需要实现  iterator 和size方法 ...如果我们想要修改自己创建的容器那么要实现add和remove方法否则 。。

进行修改操作会抛出UnSupporttedException异常   下面是一个例子 ...

在生成迭代器的时候结合局部内部类使用

 

package me;
import java.util.AbstractCollection;
import java.util.Iterator;
class Info{
 String info=null ;
 public Info(String name) {
     this.info=name ;
 }
 @Override
 public String toString() {
  return this.getClass().getName()+": "+info;
 }

class  MyCollection extends  AbstractCollection<Info>{ 
 private Info []arr =new Info[100];
 private int count= 0; 
 public  boolean add(Info info){
  if(count<=arr.length){
      arr[count++]=info ;
   return true ;
  }
  return false; 
 }@Override
 public boolean equals(Object obj) {
  // TODO Auto-generated method stub
  return super.equals(obj);
 }
 @Override
 public Iterator<Info> iterator() {

  return new Iterator<Info>() {
           
   private int flag=0 ;
   @Override
   public boolean hasNext() {
    
    return flag<MyCollection.this.count ;
   }
   @Override
   public Info next() {
    
    return arr[flag++];
   }
   @Override
   public void remove() {   //支持删除操作
          throw new  UnsupportedOperationException() ;     
   }
  };
 }
 @Override
 public int size() {
  return 0;
 }

public class Me   {  
 public static void main(String []agrs){ 
  MyCollection me=new MyCollection() ;
  me.add(new Info("zhangsan ")) ;
  me.add(new Info("lisi ")) ;
  me.add(new Info("zwangwu ")) ;
  me.add(new Info("zmaliu ")) ;
  for(Info i:me){
   System.out.println(i);
  }

 }

}