当前位置: 首页 > wzjs >正文

松江新城建设集团有限公司网站iis 搭建wordpress

松江新城建设集团有限公司网站,iis 搭建wordpress,网站开发报价方案,wordpress后台模板修改1. PriorityQueue中插入对象 上篇文章研究了优先级队列,优先级队列在插入元素中,要求插入的元素不能是null或者元素之间必须要能够进行比较,为了简单起见,上篇文章只是插入了Integer类型,那优先级队列中是否能插入自定…

1. PriorityQueue中插入对象

上篇文章研究了优先级队列,优先级队列在插入元素中,要求插入的元素不能是null或者元素之间必须要能够进行比较,为了简单起见,上篇文章只是插入了Integer类型,那优先级队列中是否能插入自定义类型的对象呢

有如下代码:

class Card {private int rank; //数值private String suit; //花色public Card(int rank, String suit) {this.rank = rank;this.suit = suit;}
}public class Test {public static void TestForPriority() {PriorityQueue<Card> p = new PriorityQueue<>();p.offer(new Card(1, "♥"));p.offer(new Card(2, "♥"));}public static void main(String[] args) {TestForPriority();}
}

运行结果为:

原因在上篇文中也有所提及,优先级队列底层使用堆,而向堆中插入元素中,为了满足堆的性质(offer方法中会检测是否有比较器,如果没有比较器会强转为Compareable),必须要进行元素的比较,而此时自定义类型Card是没有办法直接进行比较的,所以会抛出上面的异常。

2. 元素的比较

2.1 基本类型的比较

Java中,基本类型的对象可以直接比较大小

public class TestCompare {public static void main(String[] args) {int a = 10;int b = 20;System.out.println(a > b);System.out.println(a < b);System.out.println(a == b);char c1 = 'A';char c2 = 'B';System.out.println(c1 > c2);System.out.println(c1 < c2);System.out.println(c1 == c2);boolean b1 = true;boolean b2 = false;System.out.println(b1 == b2);System.out.println(b1 != b2);}}

2.2 对象比较的问题

代码如下

如果在main方法中

有System.out.println(c1 > c2),会编译报错

有System.out.println(c1 == c2) 编译成功 --> 打印false 因为c1和c2指向不是同一个对象

有System.out.println(c1 < c2) 会编译报错

有System.out.println(c1 == c3) 编译成功 --> 打印true 因为c1 和 c3指向的是同一个对象

从上面的编译结果可以看出,Java中引用类型的变量不能直接按照 > 或者 < 进行比较 那 == 为什么可以呢?

对于自定义类型,都默认会继承自Object类而Object类中提供了equals方法,而 == 默认情况下使用的是equals方法,但是该方法的默认比较规则是:没有比较引用变量引用对象的内容,而是直接比较引用变量的地址,但有些情况下这种比较并不符合题意。

下图为Object中equal的实现,可以看到:直接比较的是两个引用变量的地址

3. 对象的比较

有些情况下,需要比较的是对象中的内容,比如:向优先级队列中插入某个对象时,需要对按照对象中内容来调整 堆,那该如何处理呢?

3.1 覆写基类的equals方法

如图:在自定义类中重写equals方法

注意: 一般覆写 equals 的套路就是上面演示的

1. 如果指向同一个对象,返回 true

2. 如果传入的为 null,返回 false

3. 如果传入的对象类型不是 Card,返回 false

4. 按照类的实现目标完成比较,例如这里只要花色和数值一样,就认为是相同的牌

5. 注意下调用其他引用类型的比较也需要 equals,例如这里的 suit 的比较

重写equals方法虽然可以进行比较,但缺点是:equal方法的返回值是boolean类型,只能按照相等的比较,不能按照大于,小于的方式进行比较

3.2 基于Comparable接口类的比较

Comparable是JDK提供的泛型的比较接口类,源码实现为:

public interface Comparable<E> {

        //返回值:

        // < 0:表示this指向的对象小于 o 指向的对象

        // > 0:表示this指向的对象大于 o 指向的对象

        // == 0: 表示this指向的对象等于 o 指向的对象

        int compareTo(E o);

}

对于用户自定义类型,如果要按照自己的方式进行比较时: 在定义类的时候,实现Comparable接口,然后在类中重写compareTo方法即可

如下图:根据数值进行比较,不管花色,这里认为null是最小的

测试符合预期:

Comparable是java.lang中的接口类,可以直接使用。

3.3 基于比较器比较

具体实现步骤如下:

1. 用户自定义比较器类,实现Comparator接口

public interface Comparator<T> {

        // 返回值: // < 0: 表示 o1 指向的对象小于 o2 指向的对象

        // == 0: 表示 o1 指向的对象等于 o2 指向的对象

        // > 0: 表示 o1 指向的对象等于 o2 指向的对象

        int compare(T o1, T o2);

}

注意区分Comparable  和 Comparator

2.覆写Comparator中的compare方法

测试符合预期:

注意:Comparator是java.util包中的泛型接口类, 使用时必须导入对应的包。

3.4 三种方式的对比

补充解释第二和第三种比较方式:

2. Comparable.comparaTo:

例如代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;class Employee implements Comparable<Employee> {private String name;private int age;public Employee(String name, int age) {this.name = name;this.age = age;}@Overridepublic int compareTo(Employee other) {return Integer.compare(this.age, other.age);}public int getAge() {return age;}@Overridepublic String toString() {return "Employee{name='" + name + "', age=" + age + "}";}
}public class Main {public static void main(String[] args) {List<Employee> employees = new ArrayList<>();employees.add(new Employee("Alice", 25));employees.add(new Employee("Bob", 20));employees.add(new Employee("Charlie", 30));// 对员工列表进行排序Collections.sort(employees);for (Employee employee : employees) {System.out.println(employee);}}
}

2. Comparator.compare

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class Main {public static void main(String[] args) {List<Student> students = new ArrayList<>();students.add(new Student("Alice", 20));students.add(new Student("Bob", 18));students.add(new Student("Charlie", 22));// 创建比较器对象AgeComparator ageComparator = new AgeComparator();// 在排序算法中显式指定比较器Collections.sort(students, ageComparator);for (Student student : students) {System.out.println(student.getName() + " - " + student.getAge());}}
}

完!


文章转载自:

http://AIxmblJe.gkxpz.cn
http://mMLCgm63.gkxpz.cn
http://1vDVeZcq.gkxpz.cn
http://zu8gJ7aX.gkxpz.cn
http://kYu7MzDN.gkxpz.cn
http://5L6gIoc4.gkxpz.cn
http://tCUDawrA.gkxpz.cn
http://bE1UaqR5.gkxpz.cn
http://Ue0HrXPI.gkxpz.cn
http://b8Ijy0oD.gkxpz.cn
http://LtU2AGcE.gkxpz.cn
http://TGFrT9Od.gkxpz.cn
http://miMHdoeV.gkxpz.cn
http://UAREEm6L.gkxpz.cn
http://ug1Tq7oo.gkxpz.cn
http://ld8PY4O9.gkxpz.cn
http://PjWdS1MX.gkxpz.cn
http://YWlRMjw0.gkxpz.cn
http://Hz8qw8Wu.gkxpz.cn
http://GPNPqUJq.gkxpz.cn
http://kJNmsOkZ.gkxpz.cn
http://TviFywnx.gkxpz.cn
http://ijKSp6M2.gkxpz.cn
http://GxHZ86fy.gkxpz.cn
http://SRCF0GtW.gkxpz.cn
http://SIJ8xJum.gkxpz.cn
http://KKgBg44A.gkxpz.cn
http://6zHLKoRI.gkxpz.cn
http://IH0XRckX.gkxpz.cn
http://EFTKoWJf.gkxpz.cn
http://www.dtcms.com/wzjs/630846.html

相关文章:

  • 成都哪些公司可以做网站最方便建立网站
  • 单页面个人网站神农架网页设计
  • html5国外网站模板html源码下载wordpress淘宝客个人中心
  • 产品发布网站的装饰怎么做网站被k还能不能在百度做推广
  • 沈阳家用电梯公司网站制作微信贷款怎么申请开通
  • 杭州网站建设 网站设计2网站制作
  • 做网站先做母版页张家界seo
  • 学做美食的网站视频佛山建网站永网
  • 给个网站好人有好报2020免费网页设计网站图片
  • 海北wap网站建设公司网页界面设计主要内容有哪些
  • 提示该域名为lp网站企业平台是什么意思
  • 一级a做爰片了网站赣州章贡区人口
  • 网站的信息架构自己做的创意的网站
  • soho建网站大连网站推广
  • 资源下载类网站源码建筑工地平台
  • 网站如何开通微信支付接口入户广州网站
  • 网站标题如何写wordpress可以自己写代码吗
  • 做网站 广州推荐电商网站建设
  • 京东优惠券网站怎么做电商网站架构
  • php做听歌网站品牌策划师
  • 免费制作的网站关于门户网站建设的整改报告
  • 济宁嘉祥网站建设户型设计软件免费
  • 网站建设模块有哪些wordpress搭建知识库
  • 优秀企业网站建设公司杭州营销型网站建设
  • 商城网站开发视频建设网站前景怎么样
  • 广州企业模板建站wordpress多媒体权限
  • dede 汽车网站系统开发必须遵守的原则有哪些
  • 网站上做网上支付功能响应式设计的网站
  • 内乡微网站开发那些网站可以够买域名
  • 泉州企业网站制作毕业设计网站开发的目的和意义