简易信息网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 9|回复: 0

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

[复制链接]

31

主题

50

帖子

203

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
203
发表于 2018-1-1 16:31:44 | 显示全部楼层 |阅读模式
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);
  }
}
}





  今天的心情非常美丽哦!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Comsenz Inc. ( 沪ICP备10006327号-1

GMT+8, 2018-1-19 15:15 , Processed in 0.042970 second(s), 21 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表