接着上一章节,我们继续介绍Java提供的数组的有用功能。

3.元素的对照Comparator

package com.ray.ch14;

import java.util.Arrays;
import java.util.Comparator; public class Test {
public static void main(String[] args) {
MyClass[] myClasses = new MyClass[3];
MyClass myClass1 = new MyClass();
MyClass myClass2 = new MyClass();
MyClass myClass3 = new MyClass();
myClass1.setId(3);
myClass2.setId(2);
myClass3.setId(1);
myClass1.setName("myClass1");
myClass2.setName("myClass2");
myClass3.setName("myClass3");
myClasses[0] = myClass1;
myClasses[1] = myClass2;
myClasses[2] = myClass3;
Arrays.sort(myClasses, new MyComparator());
System.out.println(Arrays.toString(myClasses));
}
} class MyComparator implements Comparator<MyClass> { @Override
public int compare(MyClass myClass1, MyClass myClass2) {
return myClass1.getId() > myClass2.getId() ? 1 : 0;
}
} class MyClass { private int id = 0; private String name = ""; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} @Override
public String toString() {
return "id:" + id + "&name:" + name;
}
}

输出:

[id:1&name:myClass3, id:2&name:myClass2, id:3&name:myClass1]

要使用Comparator,就必须实现Comparator接口,主要就是compare方法的实现,这样就能够自己定义类的对照,我们上面採用的是id 的对照,id较小的排前面,大的排后面。

4.数组的排序Arrays.sort

接口上面的样例。我们继续扩展,主要是通过Array.sort来对数组排序。上面的样例也有说明。

5.在有序数组中查找。

我们改动一下上面的样例:

package com.ray.ch14;

import java.util.Arrays;
import java.util.Comparator; public class Test {
public static void main(String[] args) {
MyClass[] myClasses = new MyClass[3];
MyClass myClass1 = new MyClass();
MyClass myClass2 = new MyClass();
MyClass myClass3 = new MyClass();
myClass1.setId(3);
myClass2.setId(2);
myClass3.setId(1);
myClass1.setName("myClass1");
myClass2.setName("myClass2");
myClass3.setName("myClass3");
myClasses[0] = myClass1;
myClasses[1] = myClass2;
myClasses[2] = myClass3;
Arrays.sort(myClasses, new MyComparator());
System.out.println(Arrays.toString(myClasses));
System.out.println("myClass2's pos:"
+ Arrays.binarySearch(myClasses, myClass2, new MyComparator()));
}
} class MyComparator implements Comparator<MyClass> { @Override
public int compare(MyClass myClass1, MyClass myClass2) {
return myClass1.getId() > myClass2.getId() ? 1 : 0;
}
} class MyClass { private int id = 0; private String name = ""; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} @Override
public String toString() {
return "id:" + id + "&name:" + name;
}
}

输出:

[id:1&name:myClass3, id:2&name:myClass2, id:3&name:myClass1]
myClass2's pos:1

我们在里面增加了binarySearch这个二分法查找算法,用它来查找myClass2这个对象在数组里面的位置。

注意:binarySearch对于有序序列的查找是没问题的。可是对于无序序列的查找,就会出现莫名其妙的问题(主要是位置的错误)。

总结:这一章节我们主要介绍了Java提供的数组的有用功能。

这一章节就到这里。谢谢。

-----------------------------------

文件夹

从头认识java-14.4 Java提供的数组的有用功能(2)的更多相关文章

  1. 2022 Java生态系统报告:Java 11超Java 8、Oracle在缩水、Amazon在崛起!

    近日,New Relic发布了最新的2022 Java生态系统报告,这份报告可以帮助我们深入的了解Java体系的最新使用情况,下面就一起来看看2022年,Java发展的怎么样了,还是Java 8 YY ...

  2. php提供一维数组模糊查询

    2019年9月30日14:36:15 提供一维数组模糊查询,只支持utf-8 内部处理是Unicode 编码特殊编码格式的可能会出错 if (!function_exists('arrayFuzzyQ ...

  3. 一线互联网企业常见的14个Java面试题,Java面试题集大全等你拿,颤抖吧程序员!

    本文由尚学堂学员们根据自己参加过的面试回忆.总结而成,一线互联网企业常见的14个Java面试题,包括各大互联网企业.创业小公司,互联网企业.传统软件公司.对于刚毕业和想要跳槽的宝宝们,再适用不过啦,赶 ...

  4. 一线互联网常见的 14 个 Java 面试题,你颤抖了吗程序员

    跳槽不算频繁,但参加过不少面试(电话面试.face to face 面试),面过大 / 小公司.互联网 / 传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程 ...

  5. Java - 14 Java 日期时间

    java.util包提供了Date类来封装当前的日期和时间. Date类提供两个构造函数来实例化Date对象. 第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二个构造函数接收一个参 ...

  6. 14、Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

    Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch ...

  7. 14个Java并发容器,你用过几个?

    作者:acupt 前言 不考虑多线程并发的情况下,容器类一般使用ArrayList.HashMap等线程不安全的类,效率更高.在并发场景下,常会用到ConcurrentHashMap.ArrayBlo ...

  8. 深入浅出14个Java并发容器

    前言 不考虑多线程并发的情况下,容器类一般使用ArrayList.HashMap等线程不安全的类,效率更高.在并发场景下,常会用到ConcurrentHashMap.ArrayBlockingQueu ...

  9. (转)大厂常问到的14个Java面试题

    1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是可重入锁 不同点 实现机制不同 synchronized通过java对象头锁标记和Mon ...

随机推荐

  1. tcp slowstart (TCP 慢启动)

    tcp slowstart (TCP 慢启动) 慢启动定义 慢启动,是传输控制协议使用的一种拥塞控制机制.慢启动也叫做指数增长期.慢启动是指每次TCP接收窗口收到确认时都会增长.增加的大小就是已确认段 ...

  2. php格式化时间

    1.Y 年份的四位数 2.m 月份的数字(01-12) 3.d 一个月中的第几天(01-31) 4.w 星期几的数字表示(0-6) 5.H 24小时制(00-23) 6.i 分(00-59) 7.s ...

  3. [网络流24题] COGS 750 栅格网络流

    750. 栅格网络流 ★★☆   输入文件:flowa.in   输出文件:flowa.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太 ...

  4. lxml.html删除节点树和tag对

    # encoding: utf-8import StringIO from apihelper import info, info_savefrom lxml import etree, htmlfr ...

  5. 华为上机测试题(地铁换乘-java)

    PS:自己写的,自测试OK,供大家参考. /* 高级题样题:地铁换乘描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的.经过的站点名分别如下,两条线交叉的换乘点用T1.T2表示.编写 ...

  6. 从linux看android之二--java世界的盘古女娲

    在linux从内核态进入用户态运行init进程后启动的一个进程就是zygote.zygote是在android系统中创建java世界的盘古,他创建了第一个java虚拟机,同时他又是女娲,他成功地繁殖了 ...

  7. 【原创】Talend ETL Job日志框架——基于P&G项目的一些思考和优化

    一.背景 接触talend也挺长一段时间了,在P&G项目中每天都是使用它开发job,做ETL,也看了前辈开发的很多ETL Job,学到不少.也接触了TAC(talend administrat ...

  8. 最新版 VS2015|Visual Studio Enterprise 2015简体中文版(企业版)

    Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品. Visual Studio 2015 是一个丰富的集成开发环境,可用于创建出色的 Windows.And ...

  9. elasticsearch配置文件(elasticsearch.yml)详解

    来自:http://www.searchtech.pro/articles/2013/02/18/1361194291548.html elasticsearch的config文件夹里面有两个配置文 ...

  10. RQNOJ PID217 / [NOIP1999]拦截导弹【n^2 / LIS】

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...