1. 程式人生 > >java利用AbstractCollection實現自己的可迭代集合類

java利用AbstractCollection實現自己的可迭代集合類

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);
  }

 }

}

相關推薦

java利用AbstractCollection實現自己集合

Colllection是  java.uitl包中所有集合類的一個根介面..  所以我們可以通過實現Collection介面來實現自己的集合類.. 不過由於Collection介面 方法太多.. 於是JDK提供了AbstractCollection抽象類... 這個類是Co

python 對給定集合統計出現頻率,並排序

給定一個可迭代sequence,對其中的值進行出現次數統計: 方法1: def get_counts(sequence): counts = {} for x in sequence

python 序列(列表,元組,字串),實現鄰近去重,順序不變

碼字不易,轉載請標明出處… 鄰近去重程式碼實現如下: def special_func_order(seq): list_ = [] # 定義一個空列表,用來儲存判斷後的資料 for i in range(len(seq) - 1): # 假如 le

python如何使用生成器函式實現物件

實際案例 實現一個可迭代物件的類,它能迭代出給定範圍內所有素數: pn = PrimeNumbers(1, 30) for k in pn: print k123 輸出結果為: 2 3 5 7 11 13 17 19 23 291 解決方案:將該類的__iter

python-6-如何實現物件和器物件?

python的可迭代物件:list(列表)是可迭代物件,dict(字典)是可迭代物件,string(字串)也是可迭代物件。 l = [1,2,3,4] s = 'abcdef' for x in

Java利用Redis實現消息隊列

.get keys rpo throws max del 鍵值 先進先出 instance 應用場景 為什麽要用redis?二進制存儲、java序列化傳輸、IO連接數高、連接頻繁 一、序列化   這裏編寫了一個java序列化的工具,主要是將對象轉化為byte數組,和根

Java利用MethodHandle實現反射時調用super的method

AS sta port 沒有 ase handle test ble pub 一:實現 1.Base類的實現 package me.silentdoer.reflecsuper; /** * @author silentdoer * @version

用程式碼來解釋性,器,生成器的區別

一. 創造器(creator) 這是我自己造的一個名詞,因為在python術語中,對只實現了__next__()方法的物件,好像沒有任何名分,為了說明,我將只實現了__next__()方法的物件稱為創造器(creator)。 class O_Next: def __init__(se

基於模型融合的推薦系統實現(2):式SVD分解

SVD演算法的原理網路上也有很多,不再細說了,關鍵是我們得到的資料是不完整的資料,所以要算SVD就必須做一次矩陣補全。補全的方式有很多,這裡推薦使用均值補全的方法(用每一行均值和每一列均值的平均來代替空白處),然後可以計算SVD,作PCA分析,然後就可以得到預測結果。 但是我們這裡有

器,物件,生成器區別

迭代物件 :實現__iter__方法,返回迭代器。不需要顯示繼承Iterable, 迭代器: 實現_iter__方法,__next__方法,不需要顯示繼承Iterator from collections import Iterable,Iterator def generator():

python的器,物件,生成器理解

上篇文章, python itertools 裡面實現的groupby方法。裡面用到了object, id, iter等很基礎的方法, 看的有點暈。這裡重新整理一下迭代器,可迭代物件, 生成器。複習一下,加深印象。 python語言很容易上手。比如for迴圈。 a = [1, 2,

Python生成器,器,物件

              在瞭解Python的資料結構時,容器(container)、可迭代物件(iterable)、迭代器(iterator)、生成器(generator)、列表/集合/字典推導式(list,set,dic

Python3——賦值_

如果賦值物件是可迭代的,那麼賦值給一個變數則結果是整個可迭代物件,賦值給多個變數則結果是該迭代物件對應位置的值。 line = '你好 8' wordslist = line.split(' ') word, freq = line.split(' ') print(wordslist) pri

器和物件

基於python3 迭代器 = 可迭代的物件 可迭代的物件 != 迭代器 講在前面: 返回迭代器的物件,有:open(), map(), zip()和filte()函式,這幾個函式直接返回迭代器也就是可以直接在結果中呼叫next 如: f = open('xxx.txt')

搞清楚 Python 的器、物件、生成器

很多夥伴對 Python 的迭代器、可迭代物件、生成器這幾個概念有點搞不清楚,我來說說我的理解,希望對需要的朋友有所幫助。 1 迭代器協議 迭代器協議是核心,搞懂了這個,上面的幾個概念也就很好理解了。 所謂迭代器協議,就是要求一個迭代器必須要實現如下兩個方法 iterator.__iter__(

使用java內部類實現自己的容器

這兩天期中考試,感覺Java答得不是很好,所以決定將Java抓一下,不能整天光抱著c++不放,儘管c++是我的主要學習方向,但java是我的專業課程,學不好的話以後的課設和畢設就真的涼了!!!還是自己不會利用時間,看周圍一些人,他們總是可以多頭兼顧,我這一天下來卻不知道自己忙了些啥!這些都是

python基礎-物件

可直接用於for迴圈的物件,統稱為可迭代物件,Iterable 包括集合資料型別,如list、tuple、set、dict、str,還包括生成器 判斷一個物件是否為可迭代物件: >>>from collections import Itera

物件 詳解

可迭代物件詳解 1.可迭代物件 我們已經知道可以對list、tuple、dict、set、str等型別的資料使用for...in...的迴圈語法從其中依次拿到資料進行使用,我們把這樣的過程稱為遍歷,也叫迭代。 把可以通過for...in...這類語句迭代讀取一條資料供我們使用的物件稱之為

生成器、

生成器: 將[]改為() G = (i*I for I in range(8)) 生成器是一個物件不能直接列印 通過遍歷得到生成器的資料          For I in g: &nb

Python中判斷物件是否

可使用collections模組的Iterable型別來判斷物件是否可迭代 >>> from collections import Iterable >>> isinstance(1, Iterable) False >>> isinst