从头认识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 ...
随机推荐
- POJ3345 Bribing FIPA 【背包类树形dp】
题目链接 POJ 题解 背包树形dp板题 就是读入有点无聊,浪费了很多青春 #include<iostream> #include<cstdio> #include<cm ...
- 虚拟机——vmtools安装出现Detected GCC binary at usr.bin.gcc.
在安装VMWare Tools遇到过这样一个问题 Searching for GCC... Detected GCC binary at "/usr/bin/gcc". The p ...
- NOIP2017赛前模拟11月4日总结:
第一次挂0·····有点感伤···主要是因为时间分配太不合理了··花2个半小时搞第一题最后还wa完了··第二题很简单花了30分钟打完但没打对拍结果wa完···第三题暴力可以拿20分的但没时间打了··· ...
- JavaScript的团队编程规范
本规范是针对javascript函数式编程风格与公司严重依赖于jQuery进行编码的现实制定出来. 禁止使用eval,with与caller(ecma262 v5 的use strict要求).eva ...
- 基于RRT的机器人自主探索建图
一.方法讲解: 本项目分为三个部分:机器人周围一定范围内基于RRT的全局检测, 根据上一步检测的未知区域点执行sklearn.cluster.MeanShift聚类,获取聚类中心: 根据聚类中心计算各 ...
- Struts2.0中ActionInvocation使用
Interceptor的接口定义没有什么特别的地方,除了init和destory方法以外,intercept方法是实现整个拦截器机制的核心方法.而它所依赖的参数ActionInvocation则是我们 ...
- [MySQL] 参数: innodb_flush_log_at_trx_commit和sync_binlog
MySQL参数: innodb_flush_log_at_trx_commit和sync_binlog innodb_flush_log_at_trx_commit和sync_binlog是MySQL ...
- 28.Implement strStr()---kmp
题目链接:https://leetcode.com/problems/implement-strstr/description/ 题目大意:字符串匹配,从字符串中,找到给定字符串第一次出现的位置下标, ...
- AC日记——Dining poj 3281
[POJ-3281] 思路: 把牛拆点: s向食物连边,流量1: 饮料向t连边,流量1: 食物向牛1连边,流量1: 牛2向饮料连边,流量1: 最大流: 来,上代码: #include <cstd ...
- AC日记——[WC2013]糖果公园 cogs 1817
[WC2013]糖果公园 思路: 带修改树上莫队(模板): 来,上代码: #include <cmath> #include <cstdio> #include <cst ...