`
duofeng512
  • 浏览: 7652 次
  • 性别: 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

    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)....

    C++primer 课后题答案

    第七章 函数 37 第八章 标准IO库 37 第九章 顺序容器 43 第十章 关联容器 60 第十一章 泛型算法 75 第十二章 类和数据抽象 86 第十三章 复制控制 94 第十四章 重载操作符与转换 102 第十五章 面向对象编程 116 第十...

    C++ Primer习题集 第5版(完整版)

    第7章 类 152 练习7.1~练习7.58 第8章 IO库 183 练习8.1~练习8.14 第9章 顺序容器 193 练习9.1~练习9.52 第10章 泛型算法 234 练习10.1~练习10.42 第11章 关联容器 273 练习11.1~练习11.38 第12章 ...

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

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

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

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

    陈国君编著的《Java程序设计基础》第七版的授课涉及到的代码案例完整版

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

    3.C++程序设计语言.第1~3部分.原书第4版 中文版有详细书签2016

    第7章 指针、数组与引用 148 第8章 结构、联合与枚举 173 第9章 语句 194 第10章 表达式 208 第11章 选择适当的操作 236 第12章 函数 264 第13章 异常处理 297 第14章 名字空间 337 第15章 源文件与程序 ...

    C++ STL开发技术导引(第5章)

    第7章 deque双端队列容器 102 7.1 deque技术原理 102 7.2 deque应用基础 108 7.3 本章小结 115 第8章 list双向链表容器 116 8.1 list技术原理 116 8.2 list应用基础 124 8.3 本章小结 131 第9章 ...

    C++ STL 开发技术导引(第6章)

    第7章 deque双端队列容器 102 7.1 deque技术原理 102 7.2 deque应用基础 108 7.3 本章小结 115 第8章 list双向链表容器 116 8.1 list技术原理 116 8.2 list应用基础 124 8.3 本章小结 131 第9章 ...

    程序员面试宝典-第三版(高清带目录)

     第7章 指针与引用  7.1 指针基本问题  7.2 传递动态内存  7.3 函数指针  7.4 指针数组和数组指针  7.5 迷途指针  7.6 指针和句柄  第8章 循环、递归与概率  8.1 递归基础知识  8.2 典型递归问题  8.3 ...

    C++ STL开发技术导引(第3章)

    第7章 deque双端队列容器 102 7.1 deque技术原理 102 7.2 deque应用基础 108 7.3 本章小结 115 第8章 list双向链表容器 116 8.1 list技术原理 116 8.2 list应用基础 124 8.3 本章小结 131 第9章 ...

    JDK 1.5的泛型實現(Generics in JDK 1.5)

    Java容器是一種異質容器,從「泛型」的字面意義來說, 其實這(原本的設計)才是「泛型」。 然而有時候,而且是大半時候,我們不希望容器元素如此異質化。我們多半希望 使用同質容器。即使用於多型( polymorphism...

    C++ primer 第4版 原书+习题解答+源码 清晰pdf

     第7章 函数  7.1 函数的定义  7.2 参数传递  7.3 return语句  7.4 函数声明  7.5 局部对象  7.6 内联函数  7.7 类的成员函数  7.8 重载函数  7.9 指向函数的指针  小结  术语  第8章 ...

    C++Primer中文版(第4版).part4

     第7章 函数  7.1 函数的定义  7.2 参数传递  7.3 return语句  7.4 函数声明  7.5 局部对象  7.6 内联函数  7.7 类的成员函数  7.8 重载函数  7.9 指向函数的指针  小结  术语  第8章 标准IO...

    CppPrimer5th:CppPrimer5th的习题解答

    The Solutions for C++ Primer 5th目录第I部分 C++基础第2章 变量和基本类型第3章 字符串、向量和数组第4章 表达式第5章 语句第6章 函数第7章 类第II部分 C++标准库第8章 IO库第9章 顺序容器第10章 泛型算法第11章 ...

    Cpp-Primer:C ++ Primer解决方案第五答案

    第16章模板和泛型编程 第四部分:高级主题 第十七章专业图书馆设施 Chapter 18.大型程序的工具 第19章专用工具和技术 测试 mkdir build cmake .. make 已生成所有数据文件和可执行文件。 转到相应部分的目录进行...

    编程思想下篇

    第7章 复用类 第8章 多态 第9章 接口 第10章 内部类 第11章 持有对象 第12章 通过异常处理错误 第13章 字符串 第14章 类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 ...

    Java开发详解.zip

    020701_【第7章:异常的基本概念】_异常的基本概念笔记.pdf 020702_【第7章:异常的基本概念】_异常的其他概念笔记.pdf 020801_【第8章:包及访问控制权限】_包的定义及导入笔记.pdf 020802_【第8章:包及访问控制...

Global site tag (gtag.js) - Google Analytics