泛型与集合

来源:互联网 发布:stc单片机型号图片 编辑:程序博客网 时间:2024/05/16 14:42

泛型与集合

  • 通配符:当使用一个泛型类时(包括声明泛型变量和创建泛型实例对象两种情况),都应该为此泛型传入一个实参,否则编译器会提出泛型警告。假设现在定义一个方法,该方法的参数需要使用泛型,但类型参数是不确定的,此时如果考虑使用Object类型来解决,编译时则会出现错误。通配符是由”?”来表示一个未知类型。
  • Java的集合类是一些常用的数据结构,例如:队列,栈,链表等。Java集合就像一种”容器”,用于存储数量不等的对象,并按照规范实现一些常用的操作和算法。程序员在使用Java的集合类时,不必考虑数据结构和算法的具体实现细节,根据需要直接使用这些集合类并调用相应的方法即可,从而提高了开发效率。在JDK5.0之前,Java集合会丢失容器中所有对象的数据类型,将所有对象都当成Object类型进行处理。从JDK5.0增加泛型之后,Java集合完全支持泛型,可以记住容器中对象的数据类型,从而可以编写更简洁,健壮的代码。Java所有的集合类都在java.util包下,从JDK5.0开始为了处理多线程环境下的并发安全问题,又在java.util.concurrent包下提供了一些多线程支持的集合类。Java的集合类主要由两个接口派生而出:Collection和Map.这两个接口派生出一些子接口和实现类。
  • Java中的集合分为三大类:
    1.set集合:将一个对象添加到set集合时,set集合无法记住添加的顺序,因此set集合中的元素不能重复,否则系统无法识别该元素,访问set集合中的元素也只能根据元素本身进行访问;2.list集合:与数组类似,list集合可以记住每次添加元素的顺序,因此可以根据元素的索引访问list集合中的元素,list集合中的元素可以重复且长度是可变的;3.map集合:每个元素都是有key/value键值对组成,可以根据每个元素的key来访问对应的value,Map集合中的key不允许重复,value可以重复。Collection接口是Set,Queue和List接口的父接口,该接口中定义的方法可以操作这三个接口中的任一个集合。List集合默认按照元素添加顺序设置元素的索引,索引从0开始,当使用无效的索引时将产生IndexOutOfBoundsException异常。ArrayList和Vector是List接口的两个典型实现类,完全支持List接口的所有功能方法。ArrayList称为”数组列表”,而Vector称为”向量”,两者都是基于数组实现的列表集合,但该数组是一个动态的,长度可变的,并允许再分配的Object[]数组。Set集合类似一个罐子,可以将多个元素丢进罐子里,但不能记住元素的添加顺序,因此不允许包含相同的元素。Set接口继承Collection接口,没有提供任何额外的方法,其用法与Collection一样,只是特性不同(Set中的元素不重复)。Set接口常用的实现类包括HashSet,TreeSet和EnumSet,这三个实现类各具特色:HashSet是Set接口的典型实现类,大多数使用set集合时都使用该实现类。HashSet使用Hash算法来存储集合中的元素,具有良好的存取以及查找性;TreeSet采用Tree”树”的数据结构来存储集合元素,因此可以保证集合中的元素处于排序状态。TreeSet支持两种排序方式:自然排序和定制排序,默认情况下采用自然排序;队列Queue通常以”先进先出(FIFO)”的方式排序各个元素,即最先入队的元素最先出队。Queue接口继承Collection接口,除了Collection接口中的基本操作外,还提供了队列的插入,提取和检查操作,且每个操作都存在两种形式:一种操作失败时抛出异常;另一种操作失败时返回一个特殊值(null或false)。

  • HashMap和TreeMap是Map体系中两个常用实现类:HashMap是基于哈希算法的Map接口的实现类,该实现类提供所有映射操作,并允许使用null键和null键,但不能保证映射的顺序,即是无序的映射集合;TreeMap是基于”树”结构来存储的Map接口实现类,可以根据其键的自然顺序进行排序,或定制排序方式。

  • 集合转换:Java集合框架有两大体系:Collection和Map,两者虽然从本质上是不同的,各自具有自身的特性,但可以将Map集合转换为Collection集合。将Map集合转换为Collection集合方法:entrySet():返回一个包含了Map中元素的集合,每个元素都包括键和值;keySet():返回Map中所有键的集合;values():返回Map中所有值的集合。
原创粉丝点击