Java语言基础41-44--泛型与集合

泛型与集合

在jdk1.2之后,Java提供了实现常见数据结构的类,这些实现数据结构的类通称为Java集合框架。在JDK1.5后,Java集合框架开始支持泛型,我们首先介绍泛型,然后讲解常见数据结构类的用法。

1、泛型

泛型(Generics)是在JDK1.5中推出的,其主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。 

1.1 泛型类

可以使用“class 名称<泛型列表>”声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,如:
        class ShowObject<E> 
其中ShowObject是泛型类的名称,E是其中的泛型,也就是说我们并没有指定E是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据。 
ShowObject类可以用泛型E作为自己的一个成员或方法中的参数,ShowObject.java的代码如下:
 public class ShowObject<E> { 
     public showMess (E b) { 
     String mess = b.toString();  //泛型变量只能调用toString()方法
     System.out.println(mess);   
 } 

1.2 使用泛型类声明对象

泛型类声明和创建对象时,类名后多了一对“<>”,而且必须要用具体的类型替换“<>”中的泛型。例如:
   ShowObject<A> showA;
   showA=new ShowObject<A>(); 

1.3 泛型接口

可以使用“interface名称<泛型列表>”声明一个接口,这样声名的接口称作泛型接口如:
   interface Listen<E> {
           void listen(E x);
      }
其中Listen<E>是泛型接口的名称,E是其中的泛型。泛型类和普通类都可以实现泛型接口,但普通类实现泛型接口时,必须指定泛型接口中泛型列表中的具体类型

1.4 泛型的目的

Java泛型的主要目的是可以建立具有类型安全的数据结构,如链表、散列表等数据结构,

最重要的一个优点就是:在使用这些泛型类建立数据结构时,不必进行强制类型转换,即运行时不进行类型检查。

JDK1.5是支持泛型的编译器,它将运行时的类型检查提前到编译时执行,使代码更安全。

2、集合

在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。

所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework)。
Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了,这样就大大提高了编程效率。
Collection                                     Map
-List                                              -HashMap
   -ArrayList                                   -HashTable
   -LinkedList
   -Vector
       -Stack
-Set
   -HashSet
   -TreeSet

2.1 List

List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。

用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。

和后面要学习到的Set不同,List允许有相同的元素

实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

2.1.1 ArrayList

ArrayList实现了可变大小的数组。它允许所有元素,包括null。

每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。

2.1.2 LinkedList

LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部

这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

2.2 Set

Set不保存重复的元素,因此存入Set的每个元素都必须是唯一的,同时Set接口不保证维护元素的次序。

2.2.1 HashSet

它不允许出现重复元素。

不保证集合中元素的顺序。

允许包含值为null的元素,但最多只能有一个null元素。

2.3 Map

java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap

Map主要用于存储健值对,根据键得到值,因此不允许键重复,但允许值重复

2.3.1 HashMap

Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。

HashMap最多只允许一条记录的键为Null,允许多条记录的值为 Null。

posted @ 2018-12-29 11:13  小辉爱吃素  阅读(198)  评论(0编辑  收藏  举报