Java泛型技术之发展与JDK14上的实现

上传人:重生1****23 文档编号:369270970 上传时间:2023-11-21 格式:PPT 页数:74 大小:947.50KB
返回 下载 相关 举报
Java泛型技术之发展与JDK14上的实现_第1页
第1页 / 共74页
Java泛型技术之发展与JDK14上的实现_第2页
第2页 / 共74页
Java泛型技术之发展与JDK14上的实现_第3页
第3页 / 共74页
Java泛型技术之发展与JDK14上的实现_第4页
第4页 / 共74页
Java泛型技术之发展与JDK14上的实现_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《Java泛型技术之发展与JDK14上的实现》由会员分享,可在线阅读,更多相关《Java泛型技术之发展与JDK14上的实现(74页珍藏版)》请在金锄头文库上搜索。

1、1綱要Generics History and OverviewJava Collection ClassesGenerics in Java-programmingGenerics in Java-underlying tech.Generics in C+-STL2Java Collection Classes1.Historical Collection Classes (Java 1.1)Arrays,Vector,Stack,Hashtable,Properties,BitSet2.Collections Framework(J2SE,Java 1.2)Sets,Lists,Maps

2、3.Alternative Collection LibrariesJGL from ObjectSpaceutil.concurrent,Colt4.Generic TypesGeneric Java(GJ),PolyJ,JSR14(JDK1.4)Ref.Java Collectionsp13Java Collection Framework 面對諸如 C+Standard Template Library(STL)之類的(資料結構和演算法)技術,Sun 提出一個簡略方案,就是 Java Collections Framework。Collections Framework由三部分組成:1.

3、Interfaces(abstract class types that framework support,Collection,List,Set,SortedSet,Map,SortedMap)2.Implementations(HashSet,HashMap,WeakHeahMap,ArrayList,TreeSet,TreeMap,LinkedList,all are serializable and cloneable)3.Algorithms(in class Arrays and Collections,all of static methods)Ref.Java Collect

4、ionsp1174Enumeration Interface in historical classesEnumeration enum=;while(enum.hasMoreElements()Object o=enum.nextElement();processObject(o);for(Enumeration enum=;enum.hasMoreElements();)Object o=enum.nextElement();processObject(o);提供一個走訪群集內所有元素的標準方式Ref.Java Collectionsp70每一個舊式的collection classes

5、都提供有一個method(enumeration()或elements(),用來給你一個列舉器。使用 enumeration 時絕不能修改底部群集。5void CDocument:UpdateAllViews(.)/巡訪所有的 views POSITION pos=m_viewList.GetHeadPosition();while(pos!=NULL)CView*pView=(CView*)m_viewList.GetNext(pos);if(pView!=pSender)/注意,我們不讓自己通知自己 pView-OnUpdate(pSender,lHint,pHint);Enumerati

6、on Interface in MFC提供一個走訪群集內所有元素的標準方式Ref.MFC source6Iterator Interface in Collections FrameworkInterfaceIteratorInterfaceListIteratorCollection c=.;Iterator i=c.iterator();while(i.hasNext()process(i.next();提供一個走訪群集內所有元素的標準方式Ref.Java Collectionsp1297Iterator Interface in C+STLlist myList=.;list:itera

7、tor i=myList.begin();while(i!=myList.end()process(*(i+);8Predicate Interface(use)Filter Iterator in Java帶有條件(有過濾能力)的迭代器public class PredTest static Predicate pred=new Predicate()public boolean predicate(Object o)return o.toString().startsWith(Hi);public static void main(String args)List list=Arrays.

8、asList(args);Iterator i1=list.iterator();Iterator i=new PredicateIterator(i1,pred);while(i.hasNext()System.out.println(i.next();先產生一個一般迭代器,再據此產生一個條件迭代器定義自己的條件式Ref.Java Collectionsp1329class PredicateIterator implements Iterator public PredicateIterator(Iterator iter,Predicate pred)/.public void remo

9、ve()/.public boolean hasNext()/.public Object next()/.interface Predicate boolean predicate(Object element);條件迭代器介面:需實作出 Iterator interface,亦即需有remove(),hasNext(),next()三個methods。其建構式接受一個一般迭代器和一個條件式。條件式的介面如上,需有一個測試真假的函式,並傳回真假值。條件式介面:需有一個測試條件真假結果的函式 predicate(),並傳回測試結果(真假值)Predicate Interface(impleme

10、nt)Filter Iterator in JavaRef.Java Collectionsp13010count_if(c.begin(),c.end(),not1(bind2nd(less(),40);Predicate Interface(use)functors&function adapters in C+STL帶有條件(有過濾能力)的演算法。條件可層疊配接11Algorithms in Collection Framework public static void sort(List list);public static void sort(List list,Comparato

11、r comp);public static int binarySearch(List list,Object key);public static int binarySearch(List list,Object key,Comparator comp);public static Object min(Collection col);public static Object min(Collection col,Comparator comp);public static Object max(Collection col);public static Object max(Collec

12、tion col,Comparator comp);public static void shuffle(List list);public static void shuffle(List list,Random rnd);public static void fill(List list,Object element);public static void copy(List dest,List src);in class Collections Ref.Java Collectionsp22712JGL from ObjectSpace Inc.13JGL from ObjectSpac

13、e Inc.14Generic Programming in JavaJava 為保持其語言的簡單性,強迫你(程式員)動手做一些事情:你必須記住你所擁有的是個 list of bytes(或 strings 或 lists);當你從中萃取出一個元素時,更進一步處理之前必須先將它轉型,從 class Object 轉為 class Byte(或 String 或 List)。Java2 的 collections framework 就是以此方式對待各種容器類別。如果以泛型(generic types)來擴充 Java 語言,就有可能以一種更直接的方法來表現 lists 的相關資訊。於是編譯器可

14、以追蹤記錄你是否擁有一個 list of bytes(或 strings 或 lists),而你也就不再需要將型別轉回 class Byte(或 String 或 List)。某種情況下這很類似 Ada 語言的 generics 或 C+語言的 templates。Ref.GJ:A Generic Java15Generic Programming in Java在 Java 語言中,List 是異質性的(heterogenous)-它們可以擁有任何型別的元素,沒有任何辦法可以強迫它們擁有相同型別。然而在 Java with Generics 中,List 卻是同質性的(homogenous)

15、它們必須擁有相同型別的元素,編譯器會厲行這一點;此時如果你真的需要一個 List 擁有不同型別的元素,應該使用 List。Java with Generics 以角括號角括號標示型別參數型別參數,原因是 C+使用者對它們比較熟悉,而且其他型式的括號可能會帶來混淆。Ref.GJ:A Generic Java16Java with GenericsfeaturesJava with Generics(GJ,JDK1.4-with-Generics)的幾個關鍵特性包括:相容於 Java 語言。GJ 是 Java 的超集。每一個 Java 程式在 Java with Generics 中都仍然合法而且

16、有著與過去相同的意義。相容於 Java 虛擬機器(JVM)。Java with Generics 被編譯為 JVM 碼。JVM 不需任何改變。因此 Java 所能執行之處,Java with Generics 都能執行,包括在你的瀏覽器上。相容於既有程式庫。既有的程式庫都能夠和 Java with Generics 共同運作,即使是編譯後的.class binary 型式。有時候我們也可以將一個舊程式庫翻新,加上新式型別,而不需更動其源碼。例如 Java collections framework 就可以被這樣翻新,加上泛型特性。高效(efficiency)。與泛型(generic types)相關的資訊,只有在編譯期(而非執行期)才被維護著。這意味編譯後的 Java with Generics code 幾乎完全和相同目的、相同效率的 Java code一致。Ref.GJ:A Generic Java17Java with Generics 編譯器的工作是把 Java with Generics code 翻譯回一般的 Java code。這個翻譯程序僅僅只是消除型別參數消除型別參數

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 教育/培训/课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号