集合中的元素必须做到compareTo和equals的同步
package performance; import org.apache.commons.lang.builder.CompareToBuilder; import org.apache.commons.lang.builder.EqualsBuilder; class City implements Comparable<City> { //城市编码 private String code; //城市名称 private String name; public City(String code, String name) { super(); this.code = code; this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(City o) { //按照城市名称排序 return new CompareToBuilder() .append(name, o.name) .toComparison(); } @Override public boolean equals(Object obj) { if(obj == null) { return false; } if(obj == this) { return true; } if(obj.getClass() != getClass()) { //判断类型 return false; } City city = (City)obj; //根据code判断是否相等 return new EqualsBuilder() .append(code, city.code) .isEquals(); } }
测试类:
public static void main(String[] args) { List<City> cities = new ArrayList<City>(); cities.add(new City("021", "上海")); cities.add(new City("021", "沪")); //排序 Collections.sort(cities); //查找对象 City city = new City("021", "沪"); //indexOf方式查询到索引值 int index1 = cities.indexOf(city); //binarySearch查询到索引值 int index2 = Collections.binarySearch(cities, city); System.out.println("索引值(indexOf): "+index1); System.out.println("索引值(binarySearch) "+index2); }
输出结构:
索引值(indexOf): 0 索引值(binarySearch) 1
question:为什么index1和index2不一致呢?
这是因为indexOf 是通过equals方法判断的,而binarySearch查找的依据是compareTo方法的返回值,返回0即认为找到符合条件的元素。
从这个例子中,我们可以理解:
1,.indexOf依赖equals方法查找,binarySearch则依赖compareTo方法查找
2.equals判断元素是否相等,compareTo是判断元素在排序中的位置是否相同
既然一个排序位置,一个决定元素是否相等,那么我们就应该保证当排序正确是时,其equals也相同,否则会产生逻辑混乱。
相关推荐
### 编写高质量C语言...通过对本书的学习,读者不仅能掌握编写高质量代码的具体方法,还能深刻理解代码质量对于软件开发的重要性。无论是对于新手程序员还是有一定经验的开发者来说,这本书都是一本不可多得的好书。
继续上一篇文章《如何编写高质量JS代码》今次整理一下javascript函数知识点。 2.使用函数 函数给程序员提供了主要的抽象功能,又提供实现机制。函数可以独立实现其他语言中的多个不同的特性,例如,过程、方法、构造...
### Verilog代码编写规范详解 #### 一、代码编写风格的重要性 在FPGA设计领域,Verilog作为一种重要的硬件描述语言,其代码的质量直接影响到项目的...Verilog代码编写规范的制定与遵循,是实现高质量FPGA设计的基础。
3. **代码重构**:高级的C语言代码整理工具可能包含代码重构功能,比如提取函数、重命名变量、消除重复代码等,这些操作在大型项目中尤其重要,能够帮助改善代码结构,提高代码质量。 4. **代码检查**:部分工具还...
标题中的"Delphi代码整理工具"指的是专门针对使用Delphi编程语言编写的代码进行优化、格式化和整理的软件工具。Delphi是一种基于Object Pascal语言的集成开发环境,广泛用于创建Windows桌面应用程序。代码整理工具在...
为了统一代码风格,提高代码质量,我们可以使用自动代码整理工具。这些工具能够按照特定的编码规范,如K&R、LLVM或GNU等,对C代码进行格式化,使得代码更加整洁,便于阅读和维护。 本文将深入探讨C语言的自动代码...
SonarQube 代码规范整理 SonarQube 是一个静态代码分析工具,...SonarQube 代码规范整理旨在帮助开发者编写高质量、安全的代码。通过遵守这些规范,开发者可以避免常见的 bug、漏洞和异味,从而提高代码质量和安全性。
"java代码整理"可能指的是对已经编写完成的Java程序进行优化、重构或分类管理的过程。这个过程对于保持代码的整洁性、提高代码可读性和维护性至关重要。下面,我们将深入探讨Java编程的一些关键知识点: 1. **基础...
【代码阅读整理5】 在软件开发过程中,代码阅读是一项至关重要的技能,它涉及到对他人编写的源代码的理解、分析和评估。"代码阅读整理5"可能是某个系列教程或笔记的一部分,旨在帮助开发者提升代码理解能力,提高...
"代码整理1111.rar"这个压缩包文件很可能包含了某位开发者或团队整理的一系列关于代码规范的资源,可能是示例代码、文档或者教程。尽管我们无法看到具体的文件内容,但我们可以基于这个主题,详细阐述代码规范的重要...
这份代码规范整理不仅包含了许多针对PHP开发的细节规范,还指出了编写高质量、易于协作的代码需要注意的方方面面。遵循这些规范,开发者能够编写出更加清晰、一致的代码,从而提高开发效率和项目质量。对于想要快速...
总之,IndenterVB6作为一款免费的VB6代码格式整理工具,是提升VB6编程效率和代码质量的好帮手。通过自动化整理代码,开发者可以更专注于逻辑实现,而非琐碎的格式调整工作,从而提高生产力,为软件开发带来显著的...
6. **单元测试**:通过编写测试代码来验证功能模块的正确性,确保软件质量。在C#中,常用的单元测试框架有NUnit、xUnit等。 以上就是基于标题和描述所推测的C#基础编程知识要点,以及可能在压缩包中涉及的高级主题...
《高质量C/C++编程指南》是一本以作者林锐博士的未出版手稿为基础,整理成的规范化文件,主要用于上海贝尔网络应用事业部的内部培训和规范制定。这本书旨在分享C++/C编程的良好实践,鼓励知识共享,但同时也对版权和...
### C++高质量编程知识点概述 #### 一、文件结构与头文件管理 ...以上内容是根据《学习整理C++高质量编程简介》中的部分内容总结的关键知识点。遵循这些准则和最佳实践有助于编写出高效、可维护且易于理解的C++代码。
在IT行业中,格式化文字代码和演示代码是编程和文档编写过程中的重要环节。它们有助于提高代码的可读性,使团队成员之间的沟通更为顺畅,同时也方便了代码的维护和调试。下面我们将深入探讨这两个概念及其重要性。 ...
### 高质量C编程高手整理版 #### 一、概览 本文档是关于高质量C编程的指南,由林锐博士编写,版本为1.0,发布于2001年7月24日。该文档旨在帮助学习C语言的学生和开发者掌握良好的编程习惯和实践方法,提升代码质量...