`
duofeng512
  • 浏览: 7954 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

第七章。容器和泛型

阅读更多
    首先说说容器类,Collection是容器类的根接口,List、Set、Queue是它的直接子接口。List类型允许加入重复对象,Set类型不允许加入重复对象。Map接口没有继承Collection接口,它的键对象不可重复,值对象可重复,是一对一关系。
     Set不接受重复的元素,所谓重复是指e1.equals(e2),就称e1和e2是重复元素。Set的实现类有HashSet、TreeSet、LinkedHashSet,子接口是SortSet,TreeSet就是实现了这个接口。HashSet会调用对象的hashCode()方法来获取哈希码,然后根据这个哈希码进一步计算出对象在容器中的存放位置,所以具有很好的存取和查找性能。TreeSet可以对容器中的对象进行排序,默认使用自然排序(使用自然排序时,只能向TreeSet容器加入同类型的对象),也可以实现Comparable接口,使用compareTo()方法来进行排序,x.compareTo(y):如果返回值为0,则表示x和y相等;如果返回值大于0,表示x>y。指定排序:java.util.Comparator<Type>接口提供具体的排序方式,<type>指定被比较的对象的类型,Comparator接口的compare(T o1,To2)方法用来比较两个对象的大小。
      List像数组一样也能建立数字索引与对象的关联,表达的是数据结构中线性表的概念,容器中允许存放重复对象,List接口的常用实现类有:ArrayList和LinkedList.
ArrayList代表长度可变的数组,允许对元素进行随机的快速访问,但是向其中插入和删除的速度较慢。ArrayList是线程不安全的,若要成为线程安全,可用:List list=Collections.synchronizedList(new ArrayList());LinkedList在内部是采用双向循环链表实现的,插入和删除元素的速度较快,随机访问速度则较慢,LinkedList可以作为堆栈、队列、双向队列来使用,同样,LinkedList也是线程不安全的。
      Map(映射)是一种把键对象和值对象进行映射的集合,而值对象仍可以是Map类型,这样就可以形成多级映射。HashMap是Map接口的实现类,[color=red]允许使用null键和null值。迭代collection视图所需的时间与HashMap实例的“容量”及其大小(键值映射关系数)之和成比例[/color],所以,如果迭代性能很重要,则不要将初始容量设置得太高或将加载因子设置得太低。
HashMap的实例有两个参数影响其性能:初始容量和加载因子。加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行rehash操作(重建内部数据结构),从而哈希表将具有大约两倍的桶数,默认的加载因子是0.75。可能你会想到把加载因子设置高点,但这虽然减少了空间开销,但也同时增加了查询成本。在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地减少rehash操作次数。如果有很多映射关系要存储在HashMap实例中,则相对于按需执行自动rehash操作以增大表的容量来说,使用足够大的初始容量创建它将使得映射关系能更有效地存储。同样,HashMap也不是线程安全的。  TreeMap实现了SortedMap接口,可以确保键处于排序状态,有些方法比较特殊:firstKey():返回第一个键,lastKey,subMap(fromKey,toKey):生成此Map的子集。tailMap(fromKey):生成此Map的子集,由键大于或等于fromKey的所有键值组成。
       接着到泛型,泛型实现了参数化类型的概念,这个术语的意思是“适用于许多种的类型”,目的是希望类或方法能够具备最广泛的表达能力。
       泛型用于容器类中可以在编译期对容器中的类型进行类型检查,加入或取出都不用强制转换。
       在泛型类中可以使用通配符(?)和受限通配符(extends、super)。extends限制其类型必须是extends后面的类或接口的子类或实现类(接口),如:A<? extends List> a=new A<ArrayList>();。super则限制其类型必须是super后面的类的父类。如:A<? super LinkedHashSet> a=new A<HashSet>();(HashSet是LinkedHashSet的父类)。
0
2
分享到:
评论

相关推荐

    JAVA语言与编程第7章容器和泛型.ppt

    JAVA语言与编程第7章容器和泛型.ppt

    第11章泛型和容器类(第7版).pptx

    第11章泛型和容器类(第7版)

    第十三章 泛型程序设计

    **第十三章 泛型程序设计** 泛型是Java编程语言中的一个重要特性,引入于Java 5.0,它允许在定义类、接口和方法时使用类型参数,从而提高了代码的类型安全性和重用性。泛型的主要目标是提供一种方式来限制容器对象...

    java面向对象程序设计课程每章ppt(共15章+复习1章).zip

    第13章 容器和泛型.pptx 第14章 流与文件(1).pptx 第14章 流与文件(2).pptx 第15章 网络编程.pptx 第1章 Java概述.pptx 第2章 Java基础.pptx 第3章 数组.pptx 第4章 类和对象(1).pptx 第4章 类和对象(2)....

    java泛型编程

    泛型通配符允许我们使用未知的具体类型来操作泛型容器。例如,`?`表示任意类型,而`? extends Number`则表示任意`Number`的子类型。 ```java public static void printNumbers(List&lt;? extends Number&gt; numbers) { ...

    第10章 泛型算法1

    泛型算法是C++标准库中的重要组成部分,它们是一组可应用于不同类型容器和元素的通用操作,不依赖于特定容器的实现,而是依赖于元素的迭代器操作。这些算法通常定义在`&lt;algorithm&gt;`、`&lt;iostream&gt;`和`&lt;numeric&gt;`等...

    Java教程[郑阿奇][电子教案]与代码

    "第7章 容器和泛型.ppt"涵盖了Java集合框架,包括List、Set、Map等容器,以及泛型的使用。泛型是Java 5引入的新特性,能帮助你在编译时期避免类型转换错误,提高代码的类型安全性。 "第8章 Java输入.ppt"讲解了I/O...

    Java语言程序设计:第七章 泛型.ppt

    泛型是Java编程语言中的一个重要特性,它引入于JDK 5.0,主要用于提高代码的类型安全性和重用性。泛型允许我们在定义类、接口和方法时,使用一种称为类型参数的占位符,而不是具体的类型。这样,我们就可以在编译时...

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

    通过以上内容的学习,我们不仅理解了泛型的基本概念和使用方法,还深入了解了Java集合类的相关知识,特别是`List`接口及其具体实现类的特点和使用场景。这对于日常开发中高效管理和操作数据具有重要意义。

    Java基础入门自学课件 第11章 泛型(共4页).ppt

    Java泛型是自Java SE 5.0引入的一项重要特性,它允许在定义类、接口和方法时使用类型参数,从而增强了代码的类型安全性和可读性。泛型的使用可以减少强制类型转换的麻烦,并在编译时就发现可能存在的类型错误。本...

    Java基础入门自学课件 第11章 泛型(共4页).rar

    在这个“Java基础入门自学课件 第11章 泛型”中,我们可以期待学习到以下几个核心知识点: 1. **泛型的基本概念**:泛型允许我们在定义类、接口和方法时指定一种或多种类型参数,这样在实际使用时可以传入具体的...

    马士兵J2SE第七章容器个人学习笔记.pdf

    【容器API概述】 容器API是Java编程语言中用于管理和组织对象的重要部分,它包含了一系列...泛型和自动装箱/拆箱进一步简化了代码编写,提高了代码的可维护性。理解并熟练使用这些容器和概念,是Java开发中的关键技能。

    VC++ 2005系列课程(7):泛型编程

    在这个系列课程的第七部分,我们将深入探讨泛型编程的概念、应用以及如何在实际项目中有效地利用它。 泛型编程的核心在于其类型参数化,这意味着可以创建泛型函数或泛型类,这些实体可以处理任何类型的数据,只要...

    C++ STL 开发技术导引(随书源码)

    第7章 deque双端队列容器 第8章 list双向链表容器 第9章 slist单向链表容器 第10章 bit_vector位向量容器 第11章 set集合容器 第12章 multiset多重集合容器 第13章 map映照容器 第14章 multimap多重映照容器 第15章 ...

    Dart中的泛型 泛型方法 泛型类 泛型接口、库 自定义库、系统库、第三方库.zip

    在Dart编程语言中,泛型是一种...总的来说,Dart中的泛型和库系统极大地提高了代码的复用性和灵活性,使得开发者能够编写出更强大且类型安全的程序。通过熟练掌握这些概念,可以更好地利用Dart的特性,提高开发效率。

    VC++面向对象与可视化程序设计(第三版)黄维通 第七章

    《VC++面向对象与可视化程序设计(第三版)黄维通 第七章》是一本深入讲解使用Microsoft Visual C++进行面向对象编程和可视化程序开发的教材。黄维通教授是该领域的专家,他的这本书旨在帮助读者掌握C++的面向对象...

    c++STL泛型函数库

    ### C++ STL 泛型函数库之 Vector 容器详解 在C++标准模板库(STL)中,`vector`是一种非常重要的动态数组容器。它提供了动态调整大小的能力,并且支持随机访问,使得其在很多场景下都能发挥出高效、灵活的特点。下面...

    陈国君编著的《Java程序设计基础》第七版的授课课件PPT完整版

    第11章泛型和容器类(第7版).pptx 第12章注解、反射、内部类、匿名内部类与Lambda表达式(第7版).pptx 第13章图形界面设计(第7版).pptx 第14章事件处理(第7版).pptx 第15章绘图与动画程序设计(第7版).pptx 第16章 多...

    C++程序设计(04737)第七章的例子的代码

    在C++程序设计的学习过程中,第七章通常涵盖了高级主题,如类、对象、继承、多态等核心概念。这些概念是面向对象编程的基础,对于理解C++的强大功能至关重要。在这个压缩包"study07"中,我们可以期待找到一系列示例...

Global site tag (gtag.js) - Google Analytics