zoukankan      html  css  js  c++  java
  • 从头认识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提供的数组的有用功能。


    这一章节就到这里。谢谢。

    -----------------------------------

    文件夹



  • 相关阅读:
    VS2010引用App_Code下的类文件问题解决方法
    Sql server 2008 sa用户开启教程
    ASP.NET中App_Code,App_Data等文件夹的作用
    错误提示: (provider: Named Pipes Provider, error: 40 Could not open a connection to SQL Server)
    treeview展开一个节点就关闭其他节点
    ASP.NET AJAX Toolkit的安装过程
    c++推荐读物
    for()的多参数
    模板函数I n p u t
    这次真的是下定决心了
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8683331.html
Copyright © 2011-2022 走看看