您现在的位置是:主页 > news > seo网站改版/新闻最新消息今天

seo网站改版/新闻最新消息今天

admin2025/5/22 9:18:55news

简介seo网站改版,新闻最新消息今天,做标签刷单平台网站,网站建设沧州一.刚才说完treeset集合的第一种比较方式后,再说一说另外一种方式。现在想按照人的姓名排序,如果姓名相同再按年龄排。有人说将上节中的程序稍微修改一下,这是可以的。最终的输出结果就是按照年龄的字母顺序来的。如果有人说要按照年龄排&…

seo网站改版,新闻最新消息今天,做标签刷单平台网站,网站建设沧州一.刚才说完treeset集合的第一种比较方式后,再说一说另外一种方式。现在想按照人的姓名排序,如果姓名相同再按年龄排。有人说将上节中的程序稍微修改一下,这是可以的。最终的输出结果就是按照年龄的字母顺序来的。如果有人说要按照年龄排&…

一.

刚才说完treeset集合的第一种比较方式后,再说一说另外一种方式。

现在想按照人的姓名排序,如果姓名相同再按年龄排。有人说将上节中的程序稍微修改一下,这是可以的。

5dbeadc5de2a073b5404eb31d2079010a5f.jpg

d14b2689dc50e16fa1c132ad2c81aabfb7e.jpg

最终的输出结果就是按照年龄的字母顺序来的。

如果有人说要按照年龄排,那再改回来,这就没劲了。

在描述person的时候,需要让person具备比较性,只要让person实现comparable接口就可以了,并覆盖compareto方法,定义person这个对象的比较方法。

而这个比较方法,我们称之为对象的自然排序。换句话说,用的是person类里面默认的比较方法。

如果不想按照默认排序排呢?不能跑到源代码中修改代码,因为这个person类很有可能不是我们写的,这时该怎么办?

29c5dabebe55c7235df4d8da1213742c00b.jpg

对象不具备自然顺序就是说,这个对象不是我们定义的。

上面截图的意思是对象要么不具备比较性,要么比较性就不是我们需要的。这个时候怎么办?这时需要第二种方式。

0950c0dbfb76faebdde09fd6025cf64b576.jpg

不太好理解,不是说treeset能排序么?treeset可以对元素进行排序,可是它不能完成直接对元素的比较。它是在根据元素的比较结果,在确定元素的位置。

我可以排,但是由元素的比较功能说了算。大还是小,看它的返回值定的。如果元素不具备比较性,就要让集合具备了。也就是你把元素给我,我给你排,或者我来帮你进行比较。按照我的方式进行比较,而不是元素的方式。

如果集合一初始化完毕后,我们把元素添加完了,我们再具备比较性就晚了。

这个对象什么时候比的?是在添加的时候比的。添加一个没事,添加第二个就出事了。因为添加第二个就立刻开始比较了,因为要确定这个元素在容器中的位置到底是大还是小。所以在添加之前,容器具备比较性。这个比较性是在集合创建对象时完成的。

创建集合对象时要找点东西应该找谁?构造函数。创建对象要做的事情,就是构造。

java的utill包里面的treeset类,查阅它的构造函数

0a2eb45dcda71522983f6384bed9b02c359.jpg

第三个构造函数就是讲述建立一个比较器。这个比较器它是个接口。具体怎么排,它不知道,

a2576122f1716ba0639982e41e9e631003b.jpg

5c9ed47c24b47f134c0e6a1aa5ea76aff6c.jpg

67c3c9b1a9e9df077b7c384787a845cf478.jpg

comparator接口的两个方法,一个时compareT方法,一个时equals方法。先不说equals方法,

fe0db71d58f21ed259b7d577e457bc4de65.jpg

集合自身具备比较性,传递两个才能比,元素自身具备比较性,传递一个就能比。

接下来就要做比较器的动作,我准备在集合对象创建时,建立一个比较器。新建一个比较器compator的类,

ff10e655a354bc79ecf95f6eef89358c728.jpg

o1和o2就是person,集合里面装的全是person,大家比较也是person。容器就在调用compare方法,把传递的对象两个两个进行比较。

首先要做强转,因为要用对象特有方法。

59db72a5dfe63e3f13b2993f926fe378451.jpg

这里再写name就白扯了,因为name是私有的。(就是将比较挪了地方)

上面就是创建了一个根据person类的name进行排序的比较器。

之前例子中的五个自定义对象,是根据person类中本身具备的自然顺序,可是这里面改了,

a9a24cad5c4c40f9e37f61df88a21f14f79.jpg

添加了new comparator后,原先例子中的按年龄输出的结果就变为了按姓名的字母输出了。

比较器的出现,和person具备的自然排序,输出时以比较器为主(使用时比较器更为常用)。通常对象存储到集合中,通常除了equals和hashcode方法,以及toString以外,一般还会实现这个接口。

Java中的很多类都实现这个接口,比如说String,String这类事物产生很多对象,所以它应该具备着排序比较性。还有integer,数字变对象也能排序,一样要进行比较。凡是类能产生n多对象的,通常都会实现这个接口,让其具备比较性。

3e0362bed42590d449bc0630b12fe082c45.jpg

b1832d40503ace879fe0f83795ce11f7f9f.jpg

implements comparable是对象的默认排列方式,如果想指定的话,最好使用比较器来完成。

d1ffd33188bbf0e6a3ec7b82bb2ef435941.jpg