`
zjx2388
  • 浏览: 1331011 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

第七章 泛型与集合

阅读更多

1.重写hashCode()equals()

(1)       Equals()hashCode()toString()是公共方法

(2)       重写toString(),使System.out.println()或其它方法能够看到一些有用的内容,比如对象的状态

(3)       使用==来判断两个引用变量是否引用了同一个对象

(4)       使用equals()来判断两个对象在意义上是否等价

(5)       如果不重写equals()方法,则对象将不会是有用的哈希键

(6)       如果不重写equals()方法,则不同的对象不能认为是等价的

(7)       String和包装器重写了equals(),从而得到了良好的哈希键

(8)       当重写equals(),应使用instanceof运算符以确保计算适当的类

(9)       当重写equals(),应比较对象的有意义的属性

(10)   equals()规则的重点:A.自反性:x. equals(x)true;B.对称性:如果x. equals(y)true,y. equals(x)一定也为true;C.传递性:如果x. equals(y)true, y. equals(z)也为true,z.equals(x)true;D.一致性:多次调用x.equals(y)将返回同一个结果;E.Null:如果x不为null,x.equals(null)false

(11)   如果x.equals(y)true,x.hashCode()==y.hashCode()true

(12)   如果重写equals(),则应该重写hashCode()

(13)   HashMapHashSetHashtableLinkedHashMap以及LinkedHashSet使用了哈希法

(14)   有效的hashCode()重写将键平均分布在它的桶之间

(15)   重写equals()必须至少像它的hashCode()对应部分一样精确

(16)   对于迭代:如果两个对象相等,则它们的哈希码也必须相等

(17)   对于所有实例,hashCode()方法返回同一个值是合法的(实践中效率很低)

(18)   hashCode()规则的重点:A. 一致性:多次调用x.hashCode()会返回同一个整数;B. 如果x.equals(y)true,x.hashCode()==y.hashCode()true;C. 如果x.equals(y)false,x.hashCode()==y.hashCode()可以是truefalse,false将产生更好的效率

(19)   瞬态变量不适合于equals()hashCode()方法

2.集合

(1)       常见集合操作包括:添加对象、删除对象、验证对象内容、检索对象和迭代对象

(2)       “collection”3种含义:A.集合。表示一种数据结构,对象存储在其中;B.Collection.java.util接口,SetList扩展自它;C.Collections。一个类,它拥有静态集合实用工具方法

(3)       集合4种基本形式包括:List(它是ordered,允许重复,带有索引)Set(是也可不是ordered的和/sorted,但不允许重复)Map(具有健,可以是也可以不是ordered的和/sorted,但不允许重复的键)Queue(根据FIFO原则或优先权排序)

(4)       集合的4种基本子类型是:Sorted(sorted的顺序迭代遍历集合)UnsortedOrdered(以一种特定的、非随机的顺序迭代遍历集合)Unordered

(5)       排序可以按字母、数字或程序员定义的标准进行

3.常见集合的主要属性

(1)       ArrayList:快速迭代和快速随机访问

(2)       Vector:它就像一个稍慢一些的ArrayList,但具有同步方法

(3)       LinkedList:适合于向尾部添加元素,包括栈和队列

(4)       HashSet:快速访问,保证没有重复,不提供任何顺序

(5)       LinkedHashSet:没有重复,按照插入顺序迭代

(6)       TreeSet:没有重复,按照排序的顺序迭代

(7)       HashMap:最快速的更新键/值对。允许一个null键和多个null

(8)       Hashtable:就像稍慢一些的HashMap(Vector一样,由于其同步方法)。不允许null键或null

(9)       LinkedHashMap:迭代更快,按照插入顺序或者最后访问的顺序迭代。允许一个null键和多个null

(10)   TreeMap:一种排序映射

(11)   PriorityQueue:按照元素的优先级排序的待执行任务的列表

4.使用集合类

(1)       集合只能保存对象,但基本类型可以被自动装箱

(2)       用增强型for循环,或通过使用hasNext()next()的迭代器进行迭代

(3)       hasNext()用来判断是否还有更多的元素存在,迭代器不向前移动

(4)       next()返回下一个元素并向前移动迭代器

(5)       为了正确的工作,Map的键必须重写equals()hashCode()方法

(6)       队列使用offer()添加元素,使用poll删除队列头,使用peek()查找队列头

(7)       java6,TreeSetTreeMap具有新的导航方法,比如floor()higher()

(8)       可以创建/扩展TreeSetTreeMap后备子副本

5.排序和查找数组与List

(1)       排序可以按自然顺序,也可通过一个Comparable或多个Comparator进行

(2)       使用compareTo()实现Comparable,但只提供一种排序顺序

(3)       创建多个Comparator来以多种方式排序类,实现compare()

(4)       要进行排序和查找,List的元素必须是可比较的

(5)       要进行查找,数组和List必须首先进行排序

6.实用工具类:CollectionsArrays

(1)       这两个java.util类都提供:A.sort()方法,使用Comparator或自然顺序进行排序B.binarySearch()方法,查找预先排序的数组或List

(2)       Arrays.asList()根据数组创建List,并将二者链接起来

(3)       Collections.reverse()颠倒List中元素的顺序

(4)       Collections.reverseOrder()返回以反序排序的Comparator

(5)       ListSet具有创建数组的toArray()方法

7.泛型

(1)       泛型在Collections(或用泛型类型参数声明的其它类和方法)上强加编译时类型安全

(2)       一个ArrayList<Animal>讷讷个够接受类型为DogCat或任何其它的Animal子类型(子类,或者如果Animal是一个接口,则为实现)的引用

(3)       当使用泛型集合时,从集合获取(所声明的类型的)元素不需要进行强制装换。而使用非泛型集合时,强制装换是要求的

(4)       可以将泛型集合传递到带有非泛型集合的方法,但结果可能非常糟糕。编译器不能阻止方法将错误的类型插入到以前是类型安全的集合

(5)       如果编译器能够认识到,非类型安全的代码可能会危害原来声明类型安全的东西,就会给出一个编译器错误。

(6)       编译不带错误编译不带警告是不同的。编译时的警告不被认为是一个编译错误或失败

(7)       泛型类型信息在运行时不存在——它只用于编译时安全。混合泛型与遗留代码所得到的编译后代码,在运行时可能抛出异常

(8)       多态赋值只适合于基本类型,而不是泛型类型参数

(9)       多态赋值规则适合于能够进行赋值的任何地方

(10)   通配符语法允许泛型方法,接受方法变元所声明的类型的子类型/超类型

(11)   通配符关键字extends用于表示扩展实现。因此,<? extends Dog>,Dog可以是一个类,也可以是一个接口

(12)   当使用通配符时,List<? extends Dog>表示可以访问集合但不能修改它

(13)   当使用通配符时,List<? >表示任何泛型类型都可以赋给引用,但只能访问,不能修改

(14)   List<Object>只引用一个List<Object>,List<? >List<? extends Object>能保证任何类型的对象,但只能访问

(15)   泛型的声明约定用T代表类型,E代表元素。例:A.public  interface List<E>  B. boolean  add(E o) 

(16)   泛型类型标识符可以用在类、方法和变量声明中

(17)   可以在一个声明中使用多个参数化类型

(18)   可以使用不在类中定义的类型声明泛型方法:    public <T> void makeList<T t>{}

分享到:
评论

相关推荐

    Java教学课件PPT第7章 泛型和集合框架.ppt

    Java教学课件PPT

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

    ### 泛型与集合类知识点总结 #### 一、泛型简介 - **定义**:泛型是Java SE 5.0引入的新特性,它允许程序员在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。 - **作用**: - ...

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

    在上述的"Java语言程序设计:第七章 泛型.ppt"中,我们看到一个简单的栈实现——`MyStack`。最初的`MyStack`类用于存储`int`型数据。这个类包含一个整型数组`data`作为栈的底层实现,以及一个`number`变量来跟踪栈顶...

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

    - 当尝试将一个非泛型集合强制转换为泛型集合时,可能会出现`ClassCastException`。例如,`List list = new ArrayList(); list.add("Hello"); List&lt;String&gt; stringList = (List) list;`,这里的强制转换是不安全的...

    Java PPT及代码.zip

    第7章_内部类与异常类 第8章_常用实用类 第9章_组件及事件处理 第10章_输入流与输出流 第11章_JDBC数据库操作 第12章_Java多线程机制 第13章_Java网络编程 第14章_图形图像与音频 第15章_泛型与集合框架 第16章_Java...

    深入.NET平台和C#编程第七章

    《深入.NET平台和C#编程》第七章的内容涵盖了.NET框架的核心概念、C#语言的高级特性以及如何在实际开发中应用这些技术。本章旨在帮助读者深入理解.NET平台的工作原理,提升C#编程技能,从而更好地利用.NET进行软件...

    Java数据结构与算法中的源代码和applet - 站长下载

    第七章排序算法 第八章集合类型 第九章基于数组的列表集合 第十章链表 第十一章实现LinkedList类 第十二章迭代器 第十三章迭代器的实现 第十四章堆栈 第十五章队列与优先队列 第十六章二叉树 第十七章二叉树的应用 ...

    [java.核心技术.第八版].Core.Java..8th.Edition源代码 示例代码

    第1章 Java 程序设计概述 ...第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程

    java 核心技术卷一 光盘 资料

    这是一个txt文件,迅雷下载地址,复制...第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程

    java核心技术第八版源代码(全)

    第1章 Java 程序设计概述 ...第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程

    Visual C# 2010程序设计教程PPT

    第7章 方法 方法的声明 方法的参数传递 方法的重载 操作符重载 第8章 继承与多态 继承的概念 C#Z中的继承机制 虚方法与override关键字 多态性 第9章 泛型编程 泛型的概念 泛型方法...

    EasyKotlin

    Kotlin视频教程、第1章 Kotlin简介、第2章 快速开始:HelloWorld、第3章 Kotlin语言基础、第4章 基本数据类型与类型系统、第5章 集合类、第6章 泛型、第7章 面向对象编程、第8章 函数式编程、第9章 轻量级线程:协程...

    Kotlin 基础教程

    内容摘要:Kotlin视频教程、第1章 Kotlin简介、第2章 快速开始:HelloWorld、第3章 Kotlin语言基础、第4章 基本数据类型与类型系统、第5章 集合类、第6章 泛型、第7章 面向对象编程、第8章 函数式编程、第9章 轻量级...

    Kotlin 极简教程

    内容摘要:Kotlin视频教程、第1章 Kotlin简介、第2章 快速开始:HelloWorld、第3章 Kotlin语言基础、第4章 基本数据类型与类型系统、第5章 集合类、第6章 泛型、第7章 面向对象编程、第8章 函数式编程、第9章 轻量级...

    Java核心技术 卷I(原书第8版).part2 PDF

    共分为两个压缩包 此为第2个压缩包 ...第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程

    Java核心技术 卷I(原书第8版).Part1 pdf

    共分两个压缩包 此为第一个压缩包 ...第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程

    Java课件 (包括基础语法,数组与语句,面向对象编程,java异常处理,java常用基础类,java集合与泛型

    6. **Java集合与泛型**:集合框架是Java处理对象集合的主要工具,包括ArrayList、LinkedList、HashSet、HashMap等。泛型是Java 5引入的新特性,用于在编译时检查类型安全,避免强制类型转换,并提供更好的性能。理解...

    Csharp入门经典(第四版).part5.rar

    第7章 调试和错误处理 第8章 面向对象编程简介 第9章 定义类 第10章 定义类成员 第11章 集合、比较和转换 第12章 泛型 第13章 其他OOP技术 第14章 C#3.0语言的改进 第2部分 Windows编程 第15章 Windows编程基础 第16...

    Java学习PPT+源代码.zip

    8. **泛型与集合框架** (第13章 泛型与集合框架.pptx):泛型提升了集合类型的安全性和效率,而集合框架则提供了各种数据结构(如List、Set和Map)来存储和操作数据。这部分将介绍如何有效利用它们。 9. **Java网络...

Global site tag (gtag.js) - Google Analytics