接着上一章节,我们继续介绍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. [CF949C]Data Center Maintenance

    题目大意:$n$个点,每个点有一个值$w_i$.$m$个条件,每个条件给出$x,y$,要求$w_x\not =w_y$.选择最少的点,使其值加$1$后,所有条件成立(数据保证有解). 题解:对于每个条 ...

  2. UVA 11478(差分约束 + 二分)

    题意: 给定一个有向图,每条边都有一个权值,每次你可以选择一个结点和一个整数的,把所有以v为终点的边的权值减去d, 把所有以v为起点的边的权值加上d 最后要让所有边的权的最小值非负且尽量大 代码 #i ...

  3. 洛谷 P1503 鬼子进村 解题报告

    P1503 鬼子进村 题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. ...

  4. log4net日志分割,按大小分割

    最近写了一个socket通信的手表在线服务端,在日志方面,记录下Log4net日志分割 1.引入log4net.dll 2.web.config添加configsection handler 映射: ...

  5. 使用select2插件并添加拼音首字母检索

    项目中要使用下拉检索的时候要支持拼音首字母.本来拼音可以写后台,这里放前台了. 放代码 1. pinyin.js ,最后为了使用方便,直接为string对象添加了扩展方法 /* File Create ...

  6. Git 新项目关联到远程仓库

    最近前端学到小有成果,准备写一个新项目放在githup,结果没有提前在仓库创建项目,现在我把写好的项目推送到远程gitHup 1.先初始化本地仓库 Git init : 这样在项目里面都创建了一个隐藏 ...

  7. v4l2驱动文档之——streaming IO【转】

    转自:http://blog.csdn.net/zoe6553/article/details/17715441 v4l2驱动编写篇第六B--流输入输出 在本系列文章的上一期中,我们讨论了如何通过re ...

  8. 解决Windows下网络原因Composer安装失败问题的方法

    由于Composer镜像都在国外,所以直接在官网下载Windows Installer后安装很多情况下是无法成功安装的. 解决办法: 1,将php添加到系统环境变量,并开启openssl扩展. 2,点 ...

  9. 关于引用iframe的一点小说明

    有时候,在web页面中使用iframe,可以解决一些实际问题,比如跨域访问等……这篇文章的关键不是iframe适用于哪些场景?而是iframe间如何进行互通?所谓互通是指: 情况1:在任何一个页面中调 ...

  10. 牛客网 暑期ACM多校训练营(第二场)A.run-动态规划 or 递推?

    牛客网暑期ACM多校训练营(第二场) 水博客. A.run 题意就是一个人一秒可以走1步或者跑K步,不能连续跑2秒,他从0开始移动,移动到[L,R]的某一点就可以结束.问一共有多少种移动的方式. 个人 ...