`

泛型与集合

    博客分类:
  • Java
阅读更多

Java 5.0中最大的特性是引入了泛型,而引入泛型影响最大的就是几个集合类。前一次我简要记录了一下学习List的笔记,本次我将概要地描述一下泛型在集合中的其他应用。
1.指定一个类型参数
一个类型参数主要针对List、Set等集合类而言,具体处理和List大同小异,不再赘述。
2.指定两个类型参数
两个类型参数主要针对Map集合类。Map类会存储一对元素:键-值对,自然就会对应着两种类型。通List一样,使用Map时只需要指定参数类型就可以了,不同之处在于需同时指定键类型和值类型:
        Map<String, String> map = new HashMap<String, String>();
如果理解了泛型的核心概念:所谓参数类型,不过是占位符而已;那么使用一个类型参数还是两个类型参数其实没有任何差别。
3.使用Iterator
如果集合类使用了类型参数,则定义相应的迭代器时也必须指定类型参数,例如:
        Map<Integer, String> map = new TreeMap<Integer, String>();
        Interator iter = map.keySet().iterator();
上面的语句就是无法编译的,因为Iterator和Map不配套;不过,反过来,如果集合类没有使用类型参数,而Iterator使用了类型参数,这种情况是允许的,之所以这样,主要是为了方便,省掉获取元素必须进行映射的步骤。例如下面的语句:
        Map map = new TreeMap();
        Interator<Integer> iter = map.keySet().iterator();
则是合法的,不过建议你别这么做,否则你是自找麻烦。因为对于下面的语句:

Map map  =   new  HashMap();
        map.put(
" zero " " class 1 "
);
        map.put(
1 " class 2 "
);
        map.put(
" two " " class 3 "
);
        map.put(
" three " " class 4 "
);
        map.put(
" four " 3
);
        
        Iterator
< String >  iter  =
 map.keySet().iterator();    
        
while (iter.hasNext()) 
{
            System.out.println(iter.next());
        }

你能期望得到什么?上面的语句编译时不会出错,不过运行时可能让你大吃一惊。所以为了减少运行时出错的可能,建议你尽量使用参数化类型。
4.函数形参参数类型化
我们也可以指定函数形参的参数类型,例如:

private   void  printListOfStrings(List < String >  list, PrintStream out)  throws  IOException  {
       
for  (Iterator < String >  i  =  list.iterator( ); i.hasNext( ); ) 
{
       out.println(i.next( ));
       }

     }

5.返回值参数类型化
除了可以使用集合体时采用参数化类型,返回值也可以采用参数类型化,例如:

private  List < String >  getListOfStrings( )  {
        List
< String >  list  =   new  LinkedList < String >
();
        list.add(
" Hello "
);
        
return
 list;
      }

总之,引入泛型的目的就是为了减少编程时的错误,尽量将错误在编译时就发现,而不是遗留到运行时,所以我们应该尽可能地运用好泛型这一强大的工具提高我们的编程能力。下面以一个很粗糙的例子作为本文的终结:

package  com.jiang.tiger.chap1;

import
 java.util.ArrayList;
import
 java.util.Collection;
import
 java.util.Iterator;
import
 java.util.List;
import
 java.util.Map;
import
 java.util.HashMap;
import
 java.util.Set;
import
 java.util.TreeMap;

public   class  IteratorTester 
{
    
public   static  Map MapInitial(Class type) 
{
        Map
< Integer, String >  map  =   null
;
        
try  
{
            map 
=  (Map < Integer, String >
) type.newInstance();
            map.put(
0 " class 1 "
);
            map.put(
1 " class 2 "
);
            map.put(
2 " class 3 "
);
            map.put(
3 " class 4 "
);
            map.put(
4 " calss 4 "
);
        }
  catch  (InstantiationException e)  {
            
//  TODO 自动生成 catch 块

            e.printStackTrace();
        }
  catch  (IllegalAccessException e)  {
            
//  TODO 自动生成 catch 块

            e.printStackTrace();
        }

        
return  map;
    }

    
    
public   static   void  CollectionIterator()  {
        Map
< Integer, String >  map  =  MapInitial(( new  HashMap < Integer, String >
()).getClass());
        Collection
< String >  list  =
 map.values();
        Iterator
< String >  iter  =
 list.iterator();
        
        
while (iter.hasNext()) 
{
            System.out.println(iter.next());
        }

     }

    
    
public   static   void  ListIterator()  {
        Map
< Integer, String >  map  =  MapInitial(( new  TreeMap < Integer, String >
()).getClass());
        List
< String >  list  =   new  ArrayList < String >
();
        Set
< Integer >  set  =
 map.keySet();
        Iterator
< Integer >  iter  =
 set.iterator();
        
        
while (iter.hasNext()) 
{
            list.add(map.get(iter.next()));
        }

        
        Iterator
< String >  iterator  =  list.iterator();
        
while (iterator.hasNext()) 
{
            System.out.println(iterator.next());
        }

    }

    
    
public   static   void  main(String[] args) {
        CollectionIterator();
        ListIterator();
    }

}

上面程序的运行结果如下所示:

class  3
calss 
4
class 
2
class 
4
class 
1
class 
1
class 
2
class 
3
class 
4
calss 
4

分享到:
评论

相关推荐

    泛型与集合类.pdf

    Map接口是键值对的集合,不继承自Collection接口,但与Collection密切相关。Map的实现类包括HashMap和TreeMap等。HashMap按照哈希表原理工作,而TreeMap则按照键的自然顺序或者Comparator来维护键值对的排序。 ...

    泛型与集合框架

    java数据结构,泛型与集合框架,有各种集合运算的算法,Collection接口介绍,数组方法介绍等

    Week17_第9讲_泛型与集合类.pdf

    ### 泛型与集合类知识点总结 #### 一、泛型简介 - **定义**:泛型是Java SE 5.0引入的新特性,它允许程序员在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。 - **作用**: - ...

    c#泛型与集合编程.pdf

    - **List** 是一个强类型化的泛型集合,用于存储同类型的元素。它实现了 `IList&lt;T&gt;`、`ICollection&lt;T&gt;` 和 `IEnumerable&lt;T&gt;` 接口,提供了丰富的操作方法。 - **Void ForEach(匿名委托)**:可以使用 `ForEach` ...

    泛型与集合框架.ppt

    泛型与集合框架 泛型是 Java 语言中的一种机制,允许开发者创建可以重复使用的代码,可以建立具有类型安全的数据结构,如链表、散列表等。泛型的主要目的是可以建立具有类型安全的数据结构,在使用这些泛型类建立的...

    JAVA泛型与集合框架.ppt

    Java泛型与集合框架是Java编程中至关重要的概念,它们极大地增强了代码的可读性、类型安全性以及效率。泛型是Java 5引入的新特性,主要用于集合类,它允许在编译时进行类型检查,避免了运行时的类型转换异常。 泛型...

    JAVA泛型与集合框架PPT课件PPT学习教案.pptx

    JAVA泛型与集合框架知识点总结 JAVA泛型是JDK1.5中引入的一种机制,主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。泛型类的声明可以使用“class 名称&lt;泛型列表&gt;”语法,例如:class ...

    Java Generics and Collections (Java泛型与集合)

    Java泛型与集合是Java编程中的核心概念,它们在实际开发中扮演着至关重要的角色。本书"Java Generics and Collections"深入探讨了这两个主题,帮助开发者编写更安全、更高效且可维护的代码。 首先,让我们来理解...

    06_第6章 泛型与集合1

    Java泛型与集合是Java编程中的重要组成部分,它们在提高代码可读性、安全性以及减少类型转换错误方面起到了关键作用。本章将深入探讨这两个概念及其应用。 首先,理解Java集合框架的结构至关重要。Java集合框架包括...

    Java集合框架及泛型

    5. **协变与逆变**: 在泛型中,类型参数的使用会影响类型安全。比如,List是List的子类型(协变),而List不是List的子类型(逆变)。 在实际开发中,理解和熟练运用Java集合框架和泛型能够大大提高代码的可维护性...

    C#面向对象编程基础及泛型与集合的应用

    文中通过多个代码示例,展示了如何使用泛型集合和泛型接口,以及如何结合 LINQ 进行高效的数据处理。 适合人群:具有 C# 编程基础的开发人员,特别是希望深入了解面向对象编程、泛型和集合框架的技术人员。 使用场景...

    [Java泛型和集合].

    泛型与集合框架的结合使得我们可以为集合指定具体的元素类型,如`ArrayList&lt;String&gt;`,这确保了集合中的所有元素都是String类型,防止了ClassCastException的发生。 在Java中,泛型有三种主要用法: 1. 类泛型:如...

    C#泛型集合与非泛型集合

    ### C# 泛型集合与非泛型集合详解 #### 一、概述 在.NET Framework Class Library (FCL) 中,提供了丰富的集合类型,这些集合类型是编程中不可或缺的工具。根据是否支持泛型特性,这些集合大致可以分为两类:泛型...

    [Java泛型和集合].(Java.Generics.and.Collections).文字版

    Java泛型和集合是Java编程语言中的核心特性,它们极大地提高了代码的类型安全性和可读性,同时也简化了集合操作。本资料 "[Java泛型和集合].(Java.Generics.and.Collections).Maurice.Naftalin&amp;Philip.Wadler....

    集合与泛型 ppt

    Java中的集合类与泛型机制(Java SE 1.5中加入了泛型机制)

    C#泛型与集合,数据结构的应用

    在“简单的foreach示例”中,可以看到迭代器如何与`foreach`配合,简洁地遍历数组或其他集合。 数据结构是存储和组织数据的特定方式,它们直接影响到算法的效率。在C#中,`数组`是最基本的数据结构,分为一维数组、...

    学士后Java集合框架和泛型课后习题答案

    9. **并发编程与集合**:Java并发API如ConcurrentHashMap和CopyOnWriteArrayList提供了线程安全的集合实现,适用于多线程环境。 10. **CollectionHomework**:这个文件可能包含了关于集合框架和泛型的习题解答,...

Global site tag (gtag.js) - Google Analytics