Java常用类库--Arrays、比较器(comparable、Comparator)

1、Arrays类

Arrays表示数组的操作类,直接定义在java.util包中

import java.util.* ;
public class ArraysDemo{
	public static void main(String arg[]){
		int temp[] = {3,4,5,7,9,1,2,6,8} ;	// 声明一个整型数组
		Arrays.sort(temp) ;		// 进行排序的操作
		System.out.print("排序后的数组:") ;
		System.out.println(Arrays.toString(temp)) ;	// 以字符串输出数组
		// 如果要想使用二分法查询的话,则必须是排序之后的数组
		int point = Arrays.binarySearch(temp,3) ;	// 检索位置
		System.out.println("元素‘3’的位置在:" + point) ;
		Arrays.fill(temp,3)	;// 填充数组
		System.out.print("数组填充:") ;
		System.out.println(Arrays.toString(temp)) ;
	}
};

2、Comparable接口的作用

class Student implements Comparable<Student> {	// 指定类型为Student
	private String name ;
	private int age ;
	private float score ;
	public Student(String name,int age,float score){
		this.name = name ;
		this.age = age ;
		this.score = score ;
	}
	public String toString(){
		return name + "\t\t" + this.age + "\t\t" + this.score ;
	}
	public int compareTo(Student stu){	// 覆写compareTo()方法,实现排序规则的应用
		if(this.score>stu.score){
			return -1 ;
		}else if(this.score<stu.score){
			return 1 ;
		}else{
			if(this.age>stu.age){
				return 1 ;
			}else if(this.age<stu.age){
				return -1 ;
			}else{
				return 0 ;
			}
		}
	}
};
public class ComparableDemo01{
	public static void main(String args[]){
		Student stu[] = {new Student("张三",20,90.0f),
			new Student("李四",22,90.0f),new Student("王五",20,99.0f),
			new Student("赵六",20,70.0f),new Student("孙七",22,100.0f)} ;
		java.util.Arrays.sort(stu) ;	// 进行排序操作
		for(int i=0;i<stu.length;i++){	// 循环输出数组中的内容
			System.out.println(stu[i]) ;
		}
	}
};

3、分析比较器的排序原理

下面自己手工实现一个二叉树的比较算法。
为了操作方便,此处使用Integer类完成。

public class ComparableDemo02{
	public static void main(String args[]){
		Comparable com = null ;			// 声明一个Comparable接口对象
		com = 30 ;						// 通过Integer为Comparable实例化
		System.out.println("内容为:" + com) ;	// 调用的是toString()方法
	}
};

class BinaryTree{
	class Node{			// 声明一个节点类
		private Comparable data ;	// 保存具体的内容
		private Node left ;			// 保存左子树
		private Node right ;		// 保存右子树
		public Node(Comparable data){
			this.data = data ;
		}
		public void addNode(Node newNode){
			// 确定是放在左子树还是右子树
			if(newNode.data.compareTo(this.data)<0){	// 内容小,放在左子树
				if(this.left==null){
					this.left = newNode ;	// 直接将新的节点设置成左子树
				}else{
					this.left.addNode(newNode) ;	// 继续向下判断
				}
			}
			if(newNode.data.compareTo(this.data)>=0){	// 放在右子树
				if(this.right==null){
					this.right = newNode ;	// 没有右子树则将此节点设置成右子树
				}else{
					this.right.addNode(newNode) ;	// 继续向下判断
				}
			}
		}
		public void printNode(){	// 输出的时候采用中序遍历
			if(this.left!=null){
				this.left.printNode() ;	// 输出左子树
			}
			System.out.print(this.data + "\t") ;
			if(this.right!=null){
				this.right.printNode() ;
			}
		}
	};
	private Node root ;		// 根元素
	public void add(Comparable data){	// 加入元素
		Node newNode = new Node(data) ;	// 定义新的节点
		if(root==null){	// 没有根节点
			root = newNode ;	// 第一个元素作为根节点
		}else{
			root.addNode(newNode) ; // 确定是放在左子树还是放在右子树
		}
	}
	public void print(){
		this.root.printNode() ;	// 通过根节点输出
	}
};
public class ComparableDemo03{
	public static void main(String args[]){
		BinaryTree bt = new BinaryTree() ;
		bt.add(8) ;
		bt.add(3) ;
		bt.add(3) ;
		bt.add(10) ;
		bt.add(9) ;
		bt.add(1) ;
		bt.add(5) ;
		bt.add(5) ;
		System.out.println("排序之后的结果:") ;
		bt.print() ;
	}
};

4、Comparator比较器

import java.util.* ;
class Student{	// 指定类型为Student
	private String name ;
	private int age ;
	public Student(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public boolean equals(Object obj){	// 覆写equals方法
		if(this==obj){
			return true ;
		}
		if(!(obj instanceof Student)){
			return false ;
		}
		Student stu = (Student) obj ;
		if(stu.name.equals(this.name)&&stu.age==this.age){
			return true ;
		}else{
			return false ;
		}
	}
	public void setName(String name){
		this.name = name ;
	}
	public void setAge(int age){
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public int getAge(){
		return this.age ;
	}
	public String toString(){
		return name + "\t\t" + this.age  ;
	}
};

class StudentComparator implements Comparator<Student>{	// 实现比较器
	// 因为Object类中本身已经有了equals()方法
	public int compare(Student s1,Student s2){
		if(s1.equals(s2)){
			return 0 ;
		}else if(s1.getAge()<s2.getAge()){	// 按年龄比较
			return 1 ;
		}else{
			return -1 ;
		}
	}
};

public class ComparatorDemo{
	public static void main(String args[]){
		Student stu[] = {new Student("张三",20),
			new Student("李四",22),new Student("王五",20),
			new Student("赵六",20),new Student("孙七",22)} ;
		java.util.Arrays.sort(stu,new StudentComparator()) ;	// 进行排序操作
		for(int i=0;i<stu.length;i++){	// 循环输出数组中的内容
			System.out.println(stu[i]) ;
		}
	}
};
时间: 2024-09-13 21:42:00

Java常用类库--Arrays、比较器(comparable、Comparator)的相关文章

Guava v20.0-rc1,Google 的 Java 常用类库

Guava v20.0-rc1 发布了,Google 的 Java 常用类库.该版本主要更新内容是设置版本号为20.0 RC1. 详细改进内容请看:https://github.com/google/guava/compare/v20.0-rc1...master 下载地址: Source code (zip) Source code (tar.gz) Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库. 目前主要包含: com

Google的Java常用类库 Guava

Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库. 1. 基本工具 [Basic utilities] 让使用Java语言变得更舒适 1.1 使用和避免null:null是模棱两可的,会引起令人困惑的错误,有些时候它让人很不舒服.很多Guava工具类用快速失败拒绝null值,而不是盲目地接受 1.2 前置条件: 让方法中的条件检查更简单 1.3 常见Object方法: 简化Object方法实现,如hashCode()和toSt

JAVA常用类库简介(转)

Java编程语言中为方便学习者学习,编制了许多类,这些类已经经过测试,都是我们编程的基础.如果不利用这些已存在的类,我们的编程工作将变得异常复杂并且效率低下.所以我们应尽可能多的掌握Java基本类库的内容.类库中的类按照其用途归属于不同的包中. 1.java.lang包 java.lang包 是Java中最常用的包,程序不需要注入,就可以使用该包中的类,利用包中的类可以设计最基本的Java程序. 2.java.awt包 java.awt包中的类提供了图形界面的创建方法,包括按钮.文本框.列表框.

Java常用类库--实例操作--取得当前日期

在开发中经常需要取得日期,而且每次取得日期的时候代码都会重复,所以既然是重复的代码就可以将其定义成一个类,以方便重复调用,但是在操作的时候有一点土鳖需要注意:如果月份是1月,则应该显示01,但是如果是01的话,则数字肯定会忽略掉0. 1.基于Calendar类 import java.util.* ; // 导入需要的工具包 class DateTime{ // 以后直接通过此类就可以取得日期时间 private Calendar calendar = null ; // 声明一个Calenda

Java常用类库--日期操作类

1.Date类 在java.util包中定义了Date类,实用简单,直接输出其实例化对象即可. 如果希望按照自己的格式输出时间,可以使用Calendar类. import java.util.Date ; public class DateDemo01{ public static void main(String args[]){ Date date = new Date() ; // 直接实例化Date对象 System.out.println("当前日期为:" + date) ;

Java常用类库--Math、Random、NumberFormat、DecimalFormat、BigInteger、BigDecimal

1.Math类 表示数学操作,例如:平方根.四舍五入等等. public class MathDemo01{ public static void main(String args[]){ // Math类中的方法都是静态方法,直接使用"类.方法名称()"的形式调用即可 System.out.println("求平方根:" + Math.sqrt(9.0)) ; System.out.println("求两数的最大值:" + Math.max(1

Java常用类库--正则表达式(Pattern类、Matcher类)

1.认识正则 public class RegexDemo01{ public static void main(String args[]){ String str = "1234567890" ; // 此字符串由数字组成 boolean flag = true ; // 定义一个标记变量 // 要先将字符串拆分成字符数组,之后依次判断 char c[] = str.toCharArray() ; // 将字符串变为字符数组 for(int i=0;i<c.length;i+

Java常用类库--观察者设计模式( Observable类Observer接口)

如果要想实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口. import java.util.* ; class House extends Observable{ // 表示房子可以被观察 private float price ;// 价钱 public House(float price){ this.price = price ; } public float getPrice(){ return this.price ; } publi

Java常用类库--国际化程序

国际化程序: 国际化的操作就是指一个程序可以同时适应多门语言,即:如果现在程序的使用者是中国人,则会以中文为显示文字,如果现在程序的使用者是英国人,则会以英语为显示的文字,也就是说可以通过国际化操作,让一个程序适应各个国家的语言要求.那么,对于各个国家来说,每一个程序的代码是不会有任何变化的,但是只是其显示文字上有所差别. 国际化程序实现的思路:程序与显示相分离,根据不同的Locale指定的区域找到不同的资源文件并根据其key取得对应的value. 1.Locale类 2.ResourceBun