zoukankan      html  css  js  c++  java
  • 一天一个Java基础——数组

    一天一个变成了几天一个,最近接受的新东西太多、太快,有好多需要blog的但没有时间,这些基础知识应该是要深挖并好好研究的,不应该每次都草草了事,只看个皮毛。

    数组:

      JVM将数组存储在一个称为堆(heap)的内存区域中,堆用于动态内存分配,在堆中内存块可以按随意的顺序分配和释放
      1.int[] a; ——表示声明一个数组(也可写为 int a[];)
        声明一个数组变量时并不在内存中给数组分配任何空间,只是创建一个对数组的引用的存储位置
        如果变量不包含对数组的引用,那么这个变量的值为null
        通过new操作符创建数组
        使用数组初始化语法时,必须将声明、创建和初始化数组都放在一条语句中,如下面代码是错误的:
          

    double[] myList;
    myList = {1, 2, 3};

      2.数组在方法中的传递

    public static void main(String[] args) {
      int x = 1;
      int[] y = new int[10];
      m(x,y);   syso(
    "x is " + x);   syso("y[0] is" + y[0]); } public void m(int number, int[] numbers) {   number = 10;   numbers[0] = 10; }
    //output:
    x is 1
    y[0] is 10

        这是因为:
          对于基本数据类型参数,传递的是实参的值
          对于数组类型参数,参数值是数组的引用,给方法传递的是这个引用

      3.查询
        线性查询与二分查询

    package Test;
    
    public class Test2 {
        /**
         * 二分查找:
         *     使用二分查找法的前提条件是数组中的元素必须已经排好序
         *  二分查找法首先将关键字与数组的中间元素进行比较,有下面3种情况
             *  1.如果关键字小于中间元素,只需要在数组的前一半元素中继续查找
             *  2.如果关键字大于中间元素,只需要在数组的后一半元素中继续查找
             *  3.如果关键字与中间元素相等,那么就找到了,查找结束
         *  如一个有1024(2^10)个元素的数组,最好情况下只需要比较11次,最坏情况下要比较1023次
         */
        
        public static void main(String[] args) {
            int[] list = {1, 4, 4, 2, 5, -3, 6, 2};
            int i = lineraSearch(list, 4);
            System.out.println(i);
            int j = lineraSearch(list, -4);
            System.out.println(j);
            int k = lineraSearch(list, -3);
            System.out.println(k);
            
            int[] list1 = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
            int i1 = binarySearch(list1, 2);
            System.out.println(i1);
            int j1 = binarySearch(list1, 11);
            System.out.println(j1);
            int k1 = binarySearch(list1, 79);
            System.out.println(k1);
            
            //output:
            /*
               1
              -1
               5
               0
               4
              12
             */
        }
        
        /**
         * 线性查找法——最简单、最low
         * @param list
         * @param key
         * @return
         */
        public static int lineraSearch(int[] list, int key) {
            for (int i = 0; i < list.length; i++) {
                if (key == list[i]){
                    return i;
                }
            }
            return -1;
        }
        
        /**
         * 二分查找法
         * @param list
         * @param key
         * @return
         */
        public static int binarySearch(int[] list, int key) {
            int low = 0;
            int high = list.length - 1;
            while (high >= low) {
                int mid = (high + low) / 2;
                if (key < list[mid]) {
                    high = mid - 1;
                } else if (key == list[mid]) {
                    return mid;
                } else {
                    low = mid + 1;
                }
            }
            return -1;
        }
    
    }

      4.排序
        选择排序

     1 /*
     2      * 选择排序
     3      *     1.选择排序法先找到数列中最小的数
     4      *     2.然后将它放在数列的最前面
     5      *     3.在剩下的数中,循环1、2操作
     6      */
     7     public static void selectionSort(int[] array) {
     8         for (int i = 0; i < array.length - 1; i++) {
     9             int minValue = array[i];
    10             int minIndex = i;
    11             for (int j = i + 1;j < array.length;j++) {
    12                 if (array[j] < minValue) {
    13                     minValue = array[j];
    14                     minIndex = j;
    15                 }
    16             }
    17             if (minIndex != i) {
    18                 array[minIndex] = array[i];
    19                 array[i] = minValue;
    20             }
    21         }
    22     }

        插入排序

     1 /*
     2      * 插入排序
     3      *     1.外层循环(循环控制变量i)的迭代是为了获取已排好序的子数列
     4      *     2.内层循环(循环控制变量k)将list[i]插入到从list[0]到list[i-1]的子数列中
     5      */
     6     public static void insertionSort(int[] array) {
     7         for (int i = 1; i < array.length; i++) {
     8             int minValue = array[i];
     9             int k;
    10             for (k = i - 1;k >= 0 && minValue < array[k]; k--) {
    11                 array[k + 1] = array[k];
    12             }
    13             array[k + 1] = minValue;
    14         }
    15     }

        冒泡排序
        快速排序

  • 相关阅读:
    __doPostback在客户端控件中的作用
    BlogEngine学习二:基于ICallbackEventHandler的轻量级Ajax方式
    JS操作XML数据备忘
    JS解析DataSet.GetXML()方法产生的xml
    JS中的prototype的使用方式
    实体类的二进制序列化
    PostgreSQL的.NET驱动程序Npgsql中参数对象的一个Bug
    PDF.NET的SQL日志
    PostgreSQL的PDF.NET驱动程序构建过程
    使用XSD编写具有智能提示的XML文件(以SQLMAP脚本为实例)
  • 原文地址:https://www.cnblogs.com/zhengbin/p/5380137.html
Copyright © 2011-2022 走看看