JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)
一:工具类
–不存储数据,而是在数据容器上,实现高效操作
• 排序
• 搜索
–Arrays类
–Collection类
二:Arrays类(处理数组)
(一)基本方法
–排序:对数组排序, sort/parallelSort。
–查找:从数组中查找一个元素, binarySearch。
–批量拷贝:从源数组批量复制元素到目标数组, copyOf
–批量赋值:对数组进行批量赋值, fill。
–等价性比较:判定两个数组内容是否相同, equals。
(二)实现
import java.util.Arrays;
import java.util.Random; public class ArraysTest {
public static void main(String[] args) {
//testSort();
//SearchSort();
//testCopy();
//testFill();
testEquality();
} public static void testSort() {
Random rm=new Random();
int[] a=new int[]; System.out.println("=======测试排序======"); for(int i=;i<a.length;i++) {
a[i] = rm.nextInt();
} System.out.println("===排序前===");
for(int i=;i<a.length;i++) {
System.out.print(a[i] + ",");
}
System.out.println(); System.out.println("===排序后===");
Arrays.sort(a); for(int i=;i<a.length;i++) {
System.out.print(a[i] + ",");
}
System.out.println();
} public static void SearchSort() {
Random rm=new Random();
int[] a=new int[]; System.out.println("=======测试查找======"); for(int i=;i<a.length;i++) {
a[i] = rm.nextInt();
} a[] = ;
Arrays.sort(a); System.out.println("===查找前===");
for(int i=;i<a.length;i++) {
System.out.print(a[i] + ",");
}
System.out.println();
//二分查找需要先进性排序
System.out.println("1000位置:"+Arrays.binarySearch(a, ));
} public static void testCopy() {
Random rm=new Random();
int[] a=new int[]; System.out.println("=======测试拷贝======"); for(int i=;i<a.length;i++) {
a[i] = rm.nextInt();
} int[] b=Arrays.copyOf(a, ); //拷贝前6个元素到b中 System.out.println("===拷贝前a===");
for(int i=;i<a.length;i++) {
System.out.print(a[i] + ",");
}
System.out.println(); System.out.println("===拷贝后b===");
for(int i=;i<b.length;i++) {
System.out.print(b[i] + ",");
}
System.out.println();
} public static void testFill() {
int[] a = new int[];
Arrays.fill(a, );
Arrays.fill(a, , , );
System.out.println("===========测试批量赋值============");
System.out.print("数组赋值后:");
for(int i=;i<a.length;i++)
{
System.out.print(a[i] + ",");
}
System.out.println();
} public static void testEquality() {
int[] a = new int[];
Arrays.fill(a, );
int[] b = new int[];
Arrays.fill(b, );
System.out.println(Arrays.equals(a, b)); //数据一样时为true
b[] = ;
System.out.println(Arrays.equals(a, b)); //不一致为false
}
}
public static void testSort() {
Random rm=new Random();
int[] a=new int[];
System.out.println("=======测试排序======");
for(int i=;i<a.length;i++) {
a[i] = rm.nextInt();
}
System.out.println("===排序前===");
for(int i=;i<a.length;i++) {
System.out.print(a[i] + ",");
}
System.out.println();
System.out.println("===排序后===");
Arrays.sort(a);
for(int i=;i<a.length;i++) {
System.out.print(a[i] + ",");
}
System.out.println();
}
public static void SearchSort() {
Random rm=new Random();
int[] a=new int[];
System.out.println("=======测试查找======");
for(int i=;i<a.length;i++) {
a[i] = rm.nextInt();
}
a[] = ;
Arrays.sort(a);
System.out.println("===查找前===");
for(int i=;i<a.length;i++) {
System.out.print(a[i] + ",");
}
System.out.println();
//二分查找需要先进行排序
System.out.println("1000位置:"+Arrays.binarySearch(a, ));
}
public static void testCopy() {
Random rm=new Random();
int[] a=new int[];
System.out.println("=======测试拷贝======");
for(int i=;i<a.length;i++) {
a[i] = rm.nextInt();
}
int[] b=Arrays.copyOf(a, ); //拷贝前6个元素到b中
System.out.println("===拷贝前a===");
for(int i=;i<a.length;i++) {
System.out.print(a[i] + ",");
}
System.out.println();
System.out.println("===拷贝后b===");
for(int i=;i<b.length;i++) {
System.out.print(b[i] + ",");
}
System.out.println();
}
public static void testFill() {
int[] a = new int[];
Arrays.fill(a, );
Arrays.fill(a, , , );
System.out.println("===========测试批量赋值============");
System.out.print("数组赋值后:");
for(int i=;i<a.length;i++)
{
System.out.print(a[i] + ",");
}
System.out.println();
}
public static void testEquality() {
int[] a = new int[];
Arrays.fill(a, );
int[] b = new int[];
Arrays.fill(b, );
System.out.println(Arrays.equals(a, b)); //数据一样时为true
b[] = ;
System.out.println(Arrays.equals(a, b)); //不一致为false
}
三:包装器类Collection
(一)基本方法

处理对象是 Collection及其子类 –排序:对List进行排序,sort。
–搜索:从List中搜索元素,binarySearch
–批量赋值:对List批量赋值,fill。
–最大、最小:查找集合中最大/小值,max,min
–反序:将List 反序排列,reverse
(二)实现
import java.util.ArrayList;
import java.util.Collections; public class CollectionsTest { public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add();
list.add();
list.add();
list.add(); // 排序
Collections.sort(list);
// 检索
System.out.println("元素所在的索引值是:" + Collections.binarySearch(list, ));
//最大最小
System.out.println("最大值:" + Collections.max(list));
System.out.println("最小值:" + Collections.min(list));
Collections.reverse(list); //翻转不需要用到排序 Collections.fill(list, ); //全部赋值为100
}
}
四:对象比较
(一)对象实现Comparable接口(需要修改对象类)
JAVA核心技术I---JAVA基础知识(集合set)
–compareTo方法
> 返回1,==返回0,<返回-
–Arrays和Collections在进行对象sort时,自动调用该方法
import java.util.Arrays;
class Dog implements Comparable<Dog>{
int age;
String name;
public Dog(String n,int a) {
name=n;
age=a;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public int compareTo(Dog another) {
int flag;
flag=name.compareTo(another.getName());
if(flag==) {
return age-another.getAge();
}
return flag;
}
}
public class CompareToTest {
public static void main(String[] args) {
Dog[] da=new Dog[];
da[]=new Dog("Tom",);
da[]=new Dog("Som",);
da[]=new Dog("Som",);
Arrays.sort(da);
for(Dog d : da) {
System.out.println(d.getName()+":"+d.getAge());
}
}
}
Som:
Som:
Tom:
public static void main(String[] args) {
LinkedList<Dog> dl = new LinkedList<Dog>();
dl.add(new Dog("Tom",));
dl.add(new Dog("Som",));
dl.add(new Dog("Som",));
Collections.sort(dl);
for(Dog d : dl) {
System.out.println(d.getName()+":"+d.getAge());
}
}
(二)新建Comparator(适用于对象类不可更改的情况)
例如:获取的是class,无法修改源码
–compare方法
> 返回1,==返回0,<返回-
–Comparator比较器将作为参数提交给工具类的sort方法
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList; class Dog{ //不可修改,不能添加compareTo,不能继承接口
int age;
String name; public Dog(String n,int a) {
name=n;
age=a;
} public int getAge() {
return age;
} public String getName() {
return name;
}
} class MyComparator implements Comparator<Dog>{ //需要我们自己实现一个比较器
public int compare(Dog one,Dog another) {
int flag;
flag = one.getName().compareTo(another.getName());
if(flag==0) {
return one.getAge()-another.getAge();
}
return flag;
}
} public class CompareToTest {
public static void main(String[] args) {
LinkedList<Dog> dl = new LinkedList<Dog>(); dl.add(new Dog("Tom",));
dl.add(new Dog("Som",));
dl.add(new Dog("Som",)); Collections.sort(dl,new MyComparator()); for(Dog d : dl) {
System.out.println(d.getName()+":"+d.getAge());
}
}
}
Som:
Som:
Tom:
五:练习

import java.util.Arrays;
import java.util.Scanner;
class Currency {
private String name; //货币名称
private int originalValue; //原始值
private int value; //转换为人民币后的值
public static String[] CURRENCY_NAME = { "CNY", "HKD", "USD", "EUR" };
public static int[] CURRENCY_RATIO = { , , , };
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getOriginalValue() {
return originalValue;
}
public void setOriginalValue(int originalValue) {
this.originalValue = originalValue;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
class HKD extends Currency implements Comparable{
// 实现你的构造函数与Comparable中的接口
}
class USD extends Currency implements Comparable{
// 实现你的构造函数与Comparable中的接口
}
class EUR extends Currency implements Comparable{
// 实现你的构造函数与Comparable中的接口
}
public class Main {
public static void main(String[] args) {
Currency[] cs = new Currency[];
//初始化
Scanner sc = new Scanner(System.in);
//利用hasNextXXX()判断是否还有下一输入项
int a = ;
int b = ;
int c = ;
if (sc.hasNext()) {
a = sc.nextInt();
cs[] = new HKD(a);
}
if (sc.hasNext()) {
b = sc.nextInt();
cs[] = new USD(b);
}
if (sc.hasNext()) {
c = sc.nextInt();
cs[] = new EUR(c);
}
//初始化结束
//请补充排序
//请补充输出结果
}
}

import java.util.Arrays;
import java.util.Scanner;
class Currency {
private String name; //货币名称
private int originalValue; //原始值
private int value; //转换为人民币后的值
public static String[] CURRENCY_NAME = { "CNY", "HKD", "USD", "EUR" };
public static int[] CURRENCY_RATIO = { , , , };
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getOriginalValue() {
return originalValue;
}
public void setOriginalValue(int originalValue) {
this.originalValue = originalValue;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
class HKD extends Currency implements Comparable<Currency>{
// 实现你的构造函数与Comparable中的接口
public HKD(int v) {
this.setName(Currency.CURRENCY_NAME[]);
this.setOriginalValue(v);
this.setValue(v*Currency.CURRENCY_RATIO[]/Currency.CURRENCY_RATIO[]); //转为人民币
}
public int compareTo(Currency cy) {
return this.getValue()-cy.getValue(); //比较人民币
}
}
class USD extends Currency implements Comparable<Currency> {
// 实现你的构造函数与Comparable中的接口
public USD(int v) {
this.setName(Currency.CURRENCY_NAME[]);
this.setOriginalValue(v);
this.setValue(v*Currency.CURRENCY_RATIO[]/Currency.CURRENCY_RATIO[]);
}
public int compareTo(Currency cy) {
return this.getValue()-cy.getValue();
}
}
class EUR extends Currency implements Comparable<Currency> {
// 实现你的构造函数与Comparable中的接口
public EUR(int v) {
this.setName(Currency.CURRENCY_NAME[]);
this.setOriginalValue(v);
this.setValue(v*Currency.CURRENCY_RATIO[]/Currency.CURRENCY_RATIO[]);
}
public int compareTo(Currency cy) {
return this.getValue()-cy.getValue();
}
}
public class Main {
public static void main(String[] args) {
Currency[] cs = new Currency[];
//初始化
Scanner sc = new Scanner(System.in);
//利用hasNextXXX()判断是否还有下一输入项
int a = ;
int b = ;
int c = ;
if (sc.hasNext()) {
a = sc.nextInt();
cs[] = new HKD(a);
}
if (sc.hasNext()) {
b = sc.nextInt();
cs[] = new USD(b);
}
if (sc.hasNext()) {
c = sc.nextInt();
cs[] = new EUR(c);
}
//初始化结束
//请补充排序
Arrays.sort(cs);
//请补充输出结果
for(Currency citem : cs) {
System.out.println(citem.getName()+""+citem.getOriginalValue());
}
}
}
答案
JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)的更多相关文章
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- Java核心技术 卷1 基础知识-第一天
基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...
- ASP.NET Core 基础知识(三) Program.cs类
ASP.NET Framework应用程序是严重依赖于IIS的,System.Web 中有很多方法都是直接调用的 IIS API,并且它还是驻留在IIS进程中的.而 ASP.NET Core 的运行则 ...
- Java基础知识笔记第四章:类和对象
编程语言的几个发展阶段 面向机器语言 面向过程语言 面向对象语言:封装.继承.多态 类 类声明 class Person{ ....... } class 植物{ ....... } 类体 类使用 ...
- [Java面试三]JavaWeb基础知识总结.
1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...
- Java核心技术卷阅读随笔--第4章【对象与类】
对 象 与 类 4.1 面向对象程序设计概述 面向对象程序设计(简称 OOP) 是当今主流的程序设计范型, 它已经取代了 20 世纪 70 年代的" 结构化" 过程化程序设计开发技 ...
- java前三本基础知识总结
基础软件:1:JDK,JRE,JVM(一些参数和作用),GC(机制和算法),Class,Loader(机种作用,加载顺序) 2:环境搭建:JAVA_HOME,path,class 语言基础:引用类型: ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- java 程序运行的基础知识【Java bytecode】
聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...
随机推荐
- JAVA spring配置文件总结
首先来看一个标准的Spring配置文件 applicationContext.xml <?xml version="1.0" encoding="UTF-8&quo ...
- BZOJ2618[Cqoi2006]凸多边形——半平面交
题目描述 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n=2时,两个凸多边形如下图: 则相交部分的面积为5.233. 输入 第一行有一个整数n,表示凸多边形的个数,以下依次描述各个多边形.第 ...
- BZOJ2151种树——模拟费用流+链表+堆
题目描述 A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n.并且每个位置都有一个美观度Ai,如果在这 ...
- webpack——阮一峰webpackDemo分析
首先上交阮一峰老师的github地址,一共有15个demo,我们一个一个的进行分析,结合上文所学的知识! 其中有一些内容,我做了修改,我是先看一遍然后从新敲了一遍. https://github.co ...
- 【BZOJ1211】【HNOI2004】树的计数 prufer序列
题目描述 给你\(n\)和\(n\)个点的度数,问你有多少个满足度数要求的生成树. 无解输出\(0\).保证答案不超过\({10}^{17}\). \(n\leq 150\) 题解 考虑prufer序 ...
- MT【286】最佳有理逼近
2017北大优秀中学生夏令营已知$\omega $是整系数方程$x^2+ax+b=0$的一个无理数根, 求证:存在常数$C$,使得对任意互质的正整数$p,q$都有$$|\omega-\dfrac{p} ...
- 【hdu6188】Duizi and Shunzi(贪心)
2017ACM/ICPC广西邀请赛 重现赛1007 Duizi and Shunzi 题意 有n张牌,问你最多能组成多少对子+顺子?一个牌只能用在一个顺子或者对子中. 题解 本来想写dp的,不会..小 ...
- ACM中的fread读入
fread可以加快读入速度,尤其是读特大的二进制文件. #include <cctype> typedef long long LL; char buf[100000],*p1=buf,* ...
- Shell 对整个文件夹中的文件进行MD5校验 [转]
查看本地文件的 MD5 命令:md5sum FileName查看home目录下所有文件的 MD5 码:cd ~find /home -type f -print0 | xargs -0 md5sum ...
- 06 Zabbix4.0系统CISCO交换机告警模板规划信息(基础)
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 06 Zabbix4.0系统CISCO交换机告警模板规划信息(基础) 1. Host groups ...