Arrays

package com.Arrays;

import java.util.Arrays;
import java.util.List;

public class Study01 {
    /**
     * java.util 需要导入包 主要用来操作数组,排序和搜索
     * 
     * 没有构造方法,所有方法都是static修饰 方法: asList(T... a) 返回受数组支持的固定大小的List 查找(以byte为例子):
     * 注意:使用它查找有一个前提:查找的数组是有序的 binarySearch(byte[] a,byte key)
     * 在指定数组中查找指定的值,返回下标,使用的是二分查找 binarySearch(byte[] a,int fromIndex,int
     * toIndex,byte key) 在指定数组的指定下标区间中查找指定元素 复制 copyOf(byte[] a,int newLength)
     * 复制
     *     指定数组的元素得到新数组,新数组的长度是固定的,如果长度比就数组短,截取前部分,如果不够,使用默认值填充 copyOfRange(byte[]
     *     a,int from,int to) 将旧数组在指定下标范围内的元素作为新数组返回
     *     填充 
     *     fill(byte[] a,byte val)
     *         将val填充给a中的每一个元素 
     *     fill(byte[] a,int fromIndex,int toIndex,byte val)
     * 将val填充给a中的指定元素中 比较: equals()比较数组的值是否相等,重写了Object类的同名方法 表示: toString()
     * 返回类似[1, 2, 3...]形式的数组所有内容,重写了Object类的同名方法,注意是1.5版本开始 排序: sort(byte[])
     * 底层使用的而是快速排序算法
     * 
     */
    public static void main(String[] args) {
        Study01 sd=new Study01();
        sd.testCopyAndFill();
    }
    public void testAsList(){
        List l=Arrays.asList(1,2,3);
        for(int i=0;i<l.size();i++){
            System.out.print(l.get(i)+"\t");
        }
    }
    public void testSortAndToString(){
        int[] ins = { 2, 34, 12, 54, 67, 230 };
        System.out.println(Arrays.toString(ins));
        Arrays.sort(ins);
        System.out.println(Arrays.toString(ins));
    }
    public void testBinary(){
        int[] ins = { 2, 34, 12, 54, 67, 230 };
        //二分查找需要是有序
        Arrays.sort(ins);
        System.out.println(Arrays.toString(ins));
        System.out.println(Arrays.binarySearch(ins, 34));
    }
    public void testCopyAndFill(){
        int[] ins = { 2, 34, 12, 54, 67, 230 };
        int[] ins1=Arrays.copyOf(ins, 4);
        System.out.println(Arrays.toString(ins1));
        ins1=Arrays.copyOf(ins, 6);
        System.out.println(Arrays.toString(ins1));
        Arrays.fill(ins1, 12);
        System.out.println(Arrays.toString(ins1));
        Arrays.fill(ins1, 2,4,30);
        System.out.println(Arrays.toString(ins1));
    }

    public int binarySearch0(int[] a, int fromIndex, int toIndex, int key) {//二分查找的源码
        int low = fromIndex;
        int high = toIndex - 1;

        while (low <= high) {
            int mid = (low + high) >>> 1;//无符号左移1位,相当于/2
            int midVal = a[mid];

            if (midVal < key)
                low = mid + 1;
            else if (midVal > key)
                high = mid - 1;
            else
                return mid; // key found
        }
        return -(low + 1); // key not found.
    }

}

 

posted @ 2016-06-01 13:36  guodaxia  阅读(177)  评论(0编辑  收藏  举报