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) HashMap、HashSet、Hashtable、LinkedHashMap以及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()可以是true或false,但false将产生更好的效率
(19) 瞬态变量不适合于equals()和hashCode()方法
2.集合
(1) 常见集合操作包括:添加对象、删除对象、验证对象内容、检索对象和迭代对象
(2) “collection”的3种含义:A.集合。表示一种数据结构,对象存储在其中;B.Collection.java.util接口,Set和List扩展自它;C.Collections。一个类,它拥有静态集合实用工具方法
(3) 集合4种基本形式包括:List(它是ordered的,允许重复,带有索引)、Set(是也可不是ordered的和/或sorted的,但不允许重复)、Map(具有健,可以是也可以不是ordered的和/或sorted的,但不允许重复的键)和Queue(根据FIFO原则或优先权排序)
(4) 集合的4种基本子类型是:Sorted(以sorted的顺序迭代遍历集合)、Unsorted、Ordered(以一种特定的、非随机的顺序迭代遍历集合)和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中,TreeSet和TreeMap具有新的导航方法,比如floor()和higher()
(8) 可以创建/扩展TreeSet和TreeMap的”后备”子副本
5.排序和查找数组与List
(1) 排序可以按自然顺序,也可通过一个Comparable或多个Comparator进行
(2) 使用compareTo()实现Comparable,但只提供一种排序顺序
(3) 创建多个Comparator来以多种方式排序类,实现compare()
(4) 要进行排序和查找,List的元素必须是可比较的
(5) 要进行查找,数组和List必须首先进行排序
6.实用工具类:Collections和Arrays
(1) 这两个java.util类都提供:A.sort()方法,使用Comparator或自然顺序进行排序B.binarySearch()方法,查找预先排序的数组或List
(2) Arrays.asList()根据数组创建List,并将二者链接起来
(3) Collections.reverse()颠倒List中元素的顺序
(4) Collections.reverseOrder()返回以反序排序的Comparator
(5) List和Set具有创建数组的toArray()方法
7.泛型
(1) 泛型在Collections(或用泛型类型参数声明的其它类和方法)上强加编译时类型安全
(2) 一个ArrayList<Animal>讷讷个够接受类型为Dog、Cat或任何其它的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
### 泛型与集合类知识点总结 #### 一、泛型简介 - **定义**:泛型是Java SE 5.0引入的新特性,它允许程序员在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。 - **作用**: - ...
总之,泛型是Java中处理集合和自定义数据结构的强大工具,它可以提供编译时的类型检查,减少运行时错误,提高代码的可读性和可维护性。通过使用泛型,我们可以创建更加灵活且类型安全的类和方法,以适应不同的数据...
**第十三章 泛型程序设计** 泛型是Java编程语言中的一个重要特性,引入于Java 5.0,它允许在定义类、接口和方法时使用类型参数,从而提高了代码的类型安全性和重用性。泛型的主要目标是提供一种方式来限制容器对象...
第7章_内部类与异常类 第8章_常用实用类 第9章_组件及事件处理 第10章_输入流与输出流 第11章_JDBC数据库操作 第12章_Java多线程机制 第13章_Java网络编程 第14章_图形图像与音频 第15章_泛型与集合框架 第16章_Java...
《深入.NET平台和C#编程》第七章的内容涵盖了.NET框架的核心概念、C#语言的高级特性以及如何在实际开发中应用这些技术。本章旨在帮助读者深入理解.NET平台的工作原理,提升C#编程技能,从而更好地利用.NET进行软件...
第七章排序算法 第八章集合类型 第九章基于数组的列表集合 第十章链表 第十一章实现LinkedList类 第十二章迭代器 第十三章迭代器的实现 第十四章堆栈 第十五章队列与优先队列 第十六章二叉树 第十七章二叉树的应用 ...
这是一个txt文件,迅雷下载地址,复制...第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
第1章 Java 程序设计概述 ...第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
第7章 方法 方法的声明 方法的参数传递 方法的重载 操作符重载 第8章 继承与多态 继承的概念 C#Z中的继承机制 虚方法与override关键字 多态性 第9章 泛型编程 泛型的概念 泛型方法...
Kotlin视频教程、第1章 Kotlin简介、第2章 快速开始:HelloWorld、第3章 Kotlin语言基础、第4章 基本数据类型与类型系统、第5章 集合类、第6章 泛型、第7章 面向对象编程、第8章 函数式编程、第9章 轻量级线程:协程...
内容摘要:Kotlin视频教程、第1章 Kotlin简介、第2章 快速开始:HelloWorld、第3章 Kotlin语言基础、第4章 基本数据类型与类型系统、第5章 集合类、第6章 泛型、第7章 面向对象编程、第8章 函数式编程、第9章 轻量级...
内容摘要:Kotlin视频教程、第1章 Kotlin简介、第2章 快速开始:HelloWorld、第3章 Kotlin语言基础、第4章 基本数据类型与类型系统、第5章 集合类、第6章 泛型、第7章 面向对象编程、第8章 函数式编程、第9章 轻量级...
共分为两个压缩包 此为第2个压缩包 ...第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
共分两个压缩包 此为第一个压缩包 ...第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程
6. **Java集合与泛型**:集合框架是Java处理对象集合的主要工具,包括ArrayList、LinkedList、HashSet、HashMap等。泛型是Java 5引入的新特性,用于在编译时检查类型安全,避免强制类型转换,并提供更好的性能。理解...
第7章 调试和错误处理 第8章 面向对象编程简介 第9章 定义类 第10章 定义类成员 第11章 集合、比较和转换 第12章 泛型 第13章 其他OOP技术 第14章 C#3.0语言的改进 第2部分 Windows编程 第15章 Windows编程基础 第16...
8. **泛型与集合框架** (第13章 泛型与集合框架.pptx):泛型提升了集合类型的安全性和效率,而集合框架则提供了各种数据结构(如List、Set和Map)来存储和操作数据。这部分将介绍如何有效利用它们。 9. **Java网络...
第7章~第9章依次说明类与对象、继承、多态、接口、嵌套类、抽象类和包,可以轻松带领读者进入面向对象程序设计的领域;第10章讲解了线程和泛型集合对象;第11章是XML与Android的开发基础;第12章~第13章讲解了建立...
第7章 委托和事件 第8章 字符串和正则表达式 第9章 泛型 第10章 线程化 第11章 文件和流 第12章 异常处理 第13章 数组和集合 第14章 语言集成查询(LINQ) 第15章 程序集和版本化 第Ⅱ部分 使用C#开发应用程序 第16章 ...