泛型与集合(一)

泛型与集合(一)

Java计算机高级语言

一.泛型

Jdk1.5版本提出泛型感念,泛型允许在定义类,接口,方法时声明类型形参,通过类型形参子啊创建对象,调用方法时指定参数类型。

1.定义泛型类

定义泛型类的语法如下:

其中,T待变被传入三处的数据类型。

定义泛型代码如下:

泛型与集合(一)

泛型

2.泛型的用法

在开发过程中,如果需要动态的指定参数类型,那么就需要使用泛型,定义泛型类时声明多个类型,定义泛型类时声明数组类型和集合类声明元素的类型。

1.定义泛型类时声明多个类型

其中MutiOverClass为泛型类名,T1,T2分别为被传入参数的类型。

2.定义泛型类时也可以声明数组类型。

打印书籍信息,代码如下:

泛型与集合(一)

打印书籍信息

3.集合类声明元素的类型

在集合中应用泛型可以保证集合中元素类型的唯一性,从而提高代码的安全性和可维护性。例如使用K和V两个字符代表的Map集合的键值对。

二.集合类概述

Java.util包中提供了一些集合类,这些集合类又被称为容器。集合类用来存放对象的引用。常用的集合有List集合、Set集合和Map集合,其中List与Set继承了Collection接口,各接口提供了不同的实现类。

Collection接口常用方法:

add(Obj o):将指定对象添加到当前集合中。

remove(Obj o):将指定对象从当前集合中删除。

isEmpty():返回boolean值,用于判断当前集合是否为空。

iterator():返回用于遍历当前集合的迭代器。

size():返回当前集合中元素的个数。

三.List集合

List集合包括List接口及所有实现类。List中的元素可以重复,且各元素的顺序就是添加元素的顺序。类似Java数组,可以使用下标(索引)访问集合中的某个元素。

1.List接口

List接口继承了Collection接口,可以使用Collection接口的所有方法。此外List接口还定义了两个非常重要的方法:

get(int index):获得指定索引位置上的元素。

set(int index,Obj obj):将集合中的指定索引上的对象修改成指定对象。

2.List接口实现类

因为接口不能实例化,所以Java提供List接口的实现类,其中最常用的为ArrayList以及LinkedList。

  • ArrayList:以数组的形式保存集合中的元素,能够根据索引位置随机且快速的访问集合中的元素。
  • LinkedList:以链表的形式保存集合中的元素,随机访问集合中的元素的性能较差,但向集合中插入元素和删除集合中的元素的性能出色。

以上两个实现类的构造方法如下:

List list = new ArrayList<>();

List list = new LinkedList<>();

其中,E代表泛型元素类型。

list集合的常用方法,代码如下:

泛型与集合(一)

ArrayList集合

3.Iterator迭代器

在上面的代码中,我们使用for循环遍历集合,那么有没有其他遍历集合的方法呢?

  • 迭代器,使你能够通过循环来得到或删除集合的元素。ListIterator 继承了Iterator,以允许双向遍历列表和修改元素。
  • 常用方法如下:

    hasNext() :该方法会判断集合对象是否还有下一个元素,如果已经是最后一个元素则返回false。

    next():把迭代器的指向移到下一个位置,同时,该方法返回下一个元素的引用。

    remove() 从迭代器指向的集合中移除迭代器返回的最后一个元素。

    遍历list集合,代码如下:

    泛型与集合(一)

    四.Set集合

    1.Set接口

    set接口继承了Collection接口,因此可以使用Collection中的所有方法。

    由于set中的元素不能重复,因此向set集合中添加元素时,先要判断当前元素是否已经存在set集合中,再确定执行添加操作。

    2.Set接口实现类

    set接口的实现类有HashSet以及TreeSet,分别如下:

    • HashSet:Set接口的实现类,不允许出现重复元素。
    • TreeSet:不仅实现了Set接口,还实现了java.util.SortedSet接口,因此在遍历使用TreeSet类实现的Set集合时,会默认的进行升序排序。在创建TreeSet类对象时,使用Comparator接口,可以实现定制排序,例如降序。在向集合添加自定义类对象时,必须实现Comparable接口,并实现compareTo()方法, 否则程序将会出现异常。

    注:当把一个对象添加到TreeSet集合中的时候,TreeSet的add()方法底层会调用compareTo()方法与集合中的其他元素进行比较,然后根据红黑树算法决定它的存储位置,所以向TreeSet集合中添加的应该是同一个类的对象.否则将引发类转换异常。

    实现集合元素自然排序,代码如下:

    泛型与集合(一)

    五.Map集合

    在程序中,如果向储存映射关系的数据,就要使用到Map集合。

    1.Map接口

    Map接口没有继承Collection接口,但提供了K,V的映射关系,Map中的K不能重复,但是V可以。每个K映射一个V,常用方法如下:

    put(Obj K,Obj V):向集合中添加指定的K,V的映射关系。

    containsKey(Obj K):查询是否存在K,如果有,则返回true.

    containsValue((Obj V):如果此映射将一个或多个K映射,则返回true。

    get((Obj K):如果存在指定的K,则返回该对象映射的值,否则为空null。

    keySet():返回集合中所有的K,形成的Set集合。

    values():返回该集合所有值对象形成的Collection集合。

    2.Map接口实现类

    Map接口的实现类有HashMap以及TreeMap两种,分别如下:

    • HashMap:是Map接口的实现类,HashMap能够快随通过哈希表查找其内部的映射关系,但不保证映射顺序。在K-V(键值对)中,K不能重复,所以最多有一个K为null,但是可以映射无数个V为null。
    • TreeMap:不仅实现Map接口,还实现了java.util.SortedMap接口。由于使用TreeMap类实现的Map集合存储键值对时,需要根据K进行排序,所以K不能为null。

    输出Map对应的键值对,代码如下:

    泛型与集合(一)

    以上就是我们第七章Java集合的第一小节,感谢读者翻阅,辛苦小伙伴点个赞哦。

    泛型与集合(一)

    真男人感谢您的点赞


    分享到:


    相關文章: