从头认识java-14.4 Java提供的数组的有用功能(2)
接着上一章节,我们继续介绍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)的更多相关文章
- 2022 Java生态系统报告:Java 11超Java 8、Oracle在缩水、Amazon在崛起!
近日,New Relic发布了最新的2022 Java生态系统报告,这份报告可以帮助我们深入的了解Java体系的最新使用情况,下面就一起来看看2022年,Java发展的怎么样了,还是Java 8 YY ...
- php提供一维数组模糊查询
2019年9月30日14:36:15 提供一维数组模糊查询,只支持utf-8 内部处理是Unicode 编码特殊编码格式的可能会出错 if (!function_exists('arrayFuzzyQ ...
- 一线互联网企业常见的14个Java面试题,Java面试题集大全等你拿,颤抖吧程序员!
本文由尚学堂学员们根据自己参加过的面试回忆.总结而成,一线互联网企业常见的14个Java面试题,包括各大互联网企业.创业小公司,互联网企业.传统软件公司.对于刚毕业和想要跳槽的宝宝们,再适用不过啦,赶 ...
- 一线互联网常见的 14 个 Java 面试题,你颤抖了吗程序员
跳槽不算频繁,但参加过不少面试(电话面试.face to face 面试),面过大 / 小公司.互联网 / 传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程 ...
- Java - 14 Java 日期时间
java.util包提供了Date类来封装当前的日期和时间. Date类提供两个构造函数来实例化Date对象. 第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二个构造函数接收一个参 ...
- 14、Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch ...
- 14个Java并发容器,你用过几个?
作者:acupt 前言 不考虑多线程并发的情况下,容器类一般使用ArrayList.HashMap等线程不安全的类,效率更高.在并发场景下,常会用到ConcurrentHashMap.ArrayBlo ...
- 深入浅出14个Java并发容器
前言 不考虑多线程并发的情况下,容器类一般使用ArrayList.HashMap等线程不安全的类,效率更高.在并发场景下,常会用到ConcurrentHashMap.ArrayBlockingQueu ...
- (转)大厂常问到的14个Java面试题
1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是可重入锁 不同点 实现机制不同 synchronized通过java对象头锁标记和Mon ...
随机推荐
- [CF463D]Gargari and Permutations
题目大意:给你$k(2\leqslant k\leqslant5)$个$1\sim n(n\leqslant10^3)$的排列,求它们的最长子序列 题解:将$k$个排列中每个元素的位置记录下来.如果是 ...
- Spring Boot RabbitMQ 延迟消息实现完整版
概述 曾经去网易面试的时候,面试官问了我一个问题,说 下完订单后,如果用户未支付,需要取消订单,可以怎么做 我当时的回答是,用定时任务扫描DB表即可.面试官不是很满意,提出: 用定时任务无法做到准实时 ...
- TCP面试题之四次挥手过程
TCP四次挥手过程: 1.第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态: 2.第二次挥手:Server收到FIN后,发 ...
- rest项目的基础返回类设计
package com.hmy.erp.api.vo; import java.io.Serializable; import lombok.Data; /** * erp基本状态返回类 * * @a ...
- MyBatis的常见错误总结
把MyBatis的常见错误总结一下.. UserMapper: <mapper namespace="com.ydweb.data.dao.UserMapper"> & ...
- hdu1024 Max Sum Plus Plus的另一种解法
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1024 http://www.51nod.com/onlineJudge/questionCode.htm ...
- 编译gdb 报错 No module named gdb.frames
将源码目录下的python模块拷贝到指定目录即可 cd /root/gdb-7.12/ cp -rp gdb/python/lib/gdb /usr/local/share/gdb/python/ 编 ...
- centos 7 安装配置mod_security
1.旧版本安装过程: http://blog.secaserver.com/2011/10/install-mod_security-apache2-easiest/ http://www.cnblo ...
- (未解决)WIN8下使用POWERSHELL安装python easy_install无法成功
按照https://pypi.python.org/pypi/setuptools#windows-8-powershell介绍的方法, 安装未成功.安装似乎没有启动, 也未安装成功. Windows ...
- cocos2d Programming Guide
http://python.cocos2d.org/doc/programming_guide/index.html The cocos2d Programming Guide provides in ...