java 数组实例练习

路漫漫其修远兮,吾将上下而求索。

package com.mgk.array;

import java.util.*;

public class ArrayOptions {

    public static void main(String[] args) {
        int[] array = {2,5,-2,6,-3,8,0,-7,-9,4};
        Arrays.sort(array);
        printArray("数组排序结果为:", array);
        int index = Arrays.binarySearch(array, 7);
        int index2 = Arrays.binarySearch(array, 2);
        //binarySearch 用二分查找算法在给定数组中搜索给定值的对象,数组在调用前必须排序好的,如果查找值包含
        //在数组中,则返回搜索键的索引(排序后的索引位置),否则返回(-(插入点)-1),即(-()-1)
        // 插入点是在排序数组中的插入位置,不是下标位置
        System.out.println("元素 10 在第" + index + "个位置"); // -10
        System.out.println("元素 2 在第" + index2 + "个位置"); // 5

        // 数组的长度
        printLength(array); // 10

        String[][] data = new String[2][5];
        System.out.println("data的长度:" + data.length);
        System.out.println("二维数组的长度:" + data[0].length);

        // 使用Collections.reverse(ArrayList) 将数组进行反转
        reverseArray();

        // 使用for翻转数组
        reverse();

        // 使用Collections.max() 获取最大value
        getArrayMax();

        // 使用Collections.min() 获取数组最小值
        getArrayMin();

        // 数组合并
        arrayMerge();

        // 数组填充
        arrayFill();

        // 查找数组中重复元素
        int[] arr = {2,4,5,6,3,2,4,6,7,8,9};
        findDupInArray(arr);

        //删除数组
        delArrayValue();

        // 数组差集
        arrayDiff();

        // 数组交集
        arrayIns();

        // 在数组中查找指定元素
        searchElement();

        // 判断数组是否相等
        equalsArray();
    }

    /**
     * 打印数组
     * @param message
     * @param array
     */
    private static void printArray(String message, int array[]) {
        System.out.println((message + ":[lenght:" + array.length + "]"));
        for(int i = 0; i < array.length; i++) {
            if(i !=0 ) {
                System.out.print(",");
            }
            System.out.print(array[i]);
        }
        System.out.println();
    }

    /**
     * length数组的长度
     * @param array
     */
    private static void printLength(int[] array) {
        System.out.println("数组的长度是:" + array.length);
    }

    /**
     * 使用Collections.reverse(ArrayList) 反转数组
     */
    private static void reverseArray() {
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("A");
        arrayList.add("R");
        arrayList.add("R");
        arrayList.add("A");
        arrayList.add("Y");
        System.out.println("反转前排序:" + arrayList); // 反转前排序:[A, R, R, A, Y]
        Collections.reverse(arrayList);
        System.out.println("反转后排序:" + arrayList); //反转后排序:[Y, A, R, R, A]
    }

    /**
     * 数组翻转
     */
    private static void reverse() {
        int[] arr = {1,3,5,7,-3,-2,-1};
        int[] arr1 = new int[arr.length];
        System.out.println("翻转后的数组:");
        for(int i=0; i<arr.length; i++) {
            arr1[i] = arr[arr.length-1-i];
            System.out.print(arr1[i] + " "); //-1 -2 -3 7 5 3 1
        }
    }

    /**
     * 获取最大值
     */
    private static void getArrayMax() {
        Integer[] numbers = { 8, 2, 7, 1, 4, 9, 5};
        int max = Collections.max(Arrays.asList(numbers)); // arrays.asList() 将数组转为集合
        System.out.println("使用Collections.max() :");
        System.out.println("最大值:" + max);
    }

    /**
     * 获取数组最小值
     */
    private static void getArrayMin() {
        Integer[] num = {3,44,6,32,61,1,34};
        int min = Collections.min(Arrays.asList(num));
        System.out.println("最小值:" + min);
    }

    /**
     * 数组的合并
     */
    private static void arrayMerge(){
        String[] a = {"A", "R", "R"};
        String[] b = {"A", "Y"};
        List list = new ArrayList(Arrays.asList(a));
        list.addAll(Arrays.asList(b));
        Object[] c = list.toArray();
        System.out.println("合并后的数组:" + Arrays.toString(c)); //合并后的数组:[A, R, R, A, Y]
    }

    /**
     * 数组填充
     * Arrays.fill(array, value);
     * Arrays.fill(array, fromIndex, toIndex, value);
     */
    private static void arrayFill() {
        int[] array = new int[7];
        Arrays.fill(array, 100);  // 填充数组,每项值都为100
        System.out.println("数组array的元素:");
        for(int i=0; i<array.length; i++) {
            System.out.println(array[i]);
        }
        System.out.println("数组的另一种填充方式:");
        Arrays.fill(array, 3, 6, 66);
        for(int i=0; i<array.length; i++) {
            System.out.println(array[i]);  // 100 100 100 66 66 66 100
        }
    }

    /**
     * 查找数组中相同的元素
     * @param a
     */
    public static void findDupInArray(int[] a) {
        int count = 0;
        for(int j=0; j<a.length; j++) {
            for(int k=j+1; k<a.length; k++) {
                if(a[j] == a[k]) {
                    count++;
                }
            }
            if(count == 1) {
                System.out.println("重复元素:" + a[j]);   //2、4、6
            }
            count = 0;
        }
    }

    /**
     * 一、删除数组中的元素:Java 的数组是固定长度的,无法直接删除,
     * 我们可以通过创建一个新数组,把原始数组中要保留的元素放到新数组中即可:
     * 二、也可以使用 ArrayList 的 remove () 方法来删除数组列表的元素:
     */
    public static void delArrayValue() {
        int[] oldArr = new int[] {2,3,4,5,6,7,8};
        int num = 2; //要删除的数组下标
        int[] newArr = new int[oldArr.length - 1];
        for(int i=0; i<newArr.length; i++) {
            if(num < 0 || num >= oldArr.length) {
                throw new RuntimeException("元素越界...");
            }
            if(i < num) {
                newArr[i] = oldArr[i];
            } else {
                newArr[i] = oldArr[i+1];
            }
        }
        System.out.println(Arrays.toString(oldArr)); // [2, 3, 4, 5, 6, 7, 8]
        oldArr = newArr;
        System.out.println(Arrays.toString(oldArr));  //[2, 3, 5, 6, 7, 8]
    }

    /**
     * 使用removeall()方法来计算两个数组的差集
     */
    public static void arrayDiff() {
        ArrayList objArray = new ArrayList();
        ArrayList objArray2 = new ArrayList();
        objArray2.add(0, "com1");
        objArray2.add(1, "com2");
        objArray2.add(2, "nocom1");
        objArray2.add(3, "nocom2");

        objArray.add(0, "com1");
        objArray.add(1, "com2");
        objArray.add(2,"nocom3");
        System.out.println("objArray的元素:" + objArray); //[com1, com2, nocom3]
        System.out.println("objArray2的元素:" + objArray2); // [com1, com2, nocom1, nocom2]
        objArray.removeAll(objArray2);
        System.out.println("objArray2与objArray数组的差集:" + objArray); // [nocom3]
    }

    /**
     * 使用 retainAll () 方法来计算两个数组的交集:
     */
    public static void arrayIns() {
        ArrayList arr1 = new ArrayList();
        ArrayList arr2 = new ArrayList();
        arr1.add(0,"com1");
        arr1.add(1, "com2");
        arr1.add(2, "notcom2");

        arr2.add(0, "com1");
        arr2.add(1, "com2");
        arr2.add(2,"notcom");
        arr2.add(3,"notcom1");

        System.out.println("arr1的元素:" + arr1);  // [com1, com2, notcom2]
        System.out.println("arr2的元素:" + arr2);  // [com1, com2, notcom, notcom1]
        arr1.retainAll(arr2);
        System.out.println("arr1与arr2的交集:" + arr1);   // [com1, com2]
    }

    /**
     * 使用contains()方法来查找数组中的指定元素
     */
    public static void searchElement() {
        ArrayList<String> arr1 = new ArrayList<String>();
        ArrayList<String> arr2 = new ArrayList<String>();
        arr1.add(0,"com1");
        arr1.add(1, "com2");
        arr1.add(2, "notcom2");

        arr2.add(0, "com1");
        arr2.add(1, "com2");
        arr2.add(2,"notcom");
        arr2.add(3,"notcom1");

        System.out.println("arr1的元素:" + arr1);  // [com1, com2, notcom2]
        System.out.println("arr2的元素:" + arr2); // [com1, com2, notcom, notcom1]

        System.out.println("arr1是否包含字符串 com2 ? : " + arr1.contains("com2")); // arr1是否包含字符串 com2 ? : true
        System.out.println("arr2是否包含数组 arr1 ? :" + arr2.contains(arr1)); // arr2是否包含数组 arr1 ? :false
    }

    /**
     * 使用Arrays.equals()判断数组是否相等
     */
    public static void equalsArray() {
        int[] ary1 = {1,2,3,4,5,6};
        int[] ary2 = {1,2,3,4,5,6};
        int[] ary3 = {1,2,3,4};
        System.out.println("数组ary1是否与数组 ary2 相等? :" + Arrays.equals(ary1, ary2)); // 数组ary1是否与数组 ary2 相等? :true
        System.out.println("数组ary1是否与数组 ary3 相等?:" + Arrays.equals(ary1, ary3)); // 数组ary1是否与数组 ary3 相等?:false
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,699评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,124评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,127评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,342评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,356评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,057评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,654评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,572评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,205评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,343评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,015评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,704评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,196评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,690评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,348评论 2 358

推荐阅读更多精彩内容