数组

数组概述

数组是用来存储一组相同类型数据的数据结构

数组变量属于引用数据类型

数组中的元素可以是任何数据类型

(基本类型和引用类型)

数组被创建好之后,它的大小是不能改变的,但是数组中的各个元素是可以被改变的

数组元素的引用

数组在定义并为之分配空间后,才可以引用数组中的每个元素

数组元素的引用方式:arrayName[index]

 index 为数组元素下标(索引)

数组元素下标从0开始;

长度为n的数组,下标取值范围:0 ~ n-1

 

每个数组都有一个属性length指明它的长度,例如:

arr.length 可获取数组arr的长度;

 

元素的索引必须小于数组的长度,否则会产生数组越界异常

增强for循环

缺陷:

遍历数组或集合时无法访问索引(下标)

用途:

只适合遍历显示数组或集合中元素的内容。

冒泡排序

原理:

比较两个相邻的元素,将值大的元素交换至右端

 

public static void bubbleSort(int[] a) {

    int n = a.length;

    //总共进行n-1轮的比较

    for (int i = 1; i < n; i++) {

        for (int j = 1; j < n ; j++) {

            if (a[j-1] > a[j]) {//交换

                int temp = a[j-1];

                a[j-1] = a[j];

                a[j] = temp;

            }}}}

选择排序

原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕

public static void selectionSort(int[] a) {        

    for(int i = 0; i < a.length - 1; i++) {// 做第i趟排序

        int k = i;

        for(int j = k + 1; j < a.length; j++){// 选最小的记录

            if(a[j] < a[k]){

                k = j; //记下目前找到的最小值所在的位置

            } }

        if(i != k){  //交换a[i]a[k]

            int temp = a[i];

            a[i] = a[k];

            a[k] = temp;

        }}}

插入排序

从数组的第一个元素a[0]开始,将其后一个元素a[1]插入到a[0]的前面或者后面,接着继续这一过程。每次都是将a[i]插入到已经排序好的a[0]~a[i-1]中合适的位置

public static void insertSort(int[] a) {

    for (int i = 1; i < a.length; i++) {

        for (int j = i; j > 0; j--) {

            if (a[j] < a[j - 1]) {

                int temp = a[j];

                a[j] = a[j - 1];

                a[j - 1] = temp;

            } else {

                break;

            } }}}

顺序查找

从第一个元素开始顺序比较查找。

public static int search(int[] a, int num) {        

    for(int i = 0; i < a.length; i++) {

        if(a[i] == num){

            return i;

        }

    }

    return -1;

}

 

二分查找

    int low = 0;                               // 起点

    int upper = a.length - 1;               // 终点

    while (low <= upper) {

        int mid = (low + upper) / 2;     // 中间点

        if (a[mid] < num) {                   // 中间点的值小于要查找的值

            low = mid + 1;                     // 更改查找的起点为中间点位置后一位

        } else if (a[mid] > num) {         // 中间点的值大于要查找的值

            upper = mid - 1;                  // 更改查找的终点为中间点位置前一位

        } else {                               // 中间点的值等于要查找的值

            return mid;                       // 返回该位置

        }

    }

    return -1;

}


饿汉式

饿汉式的特点是一开始就加载了,如果说懒汉式是“时间换空间”,那么饿汉式就是“空间换时间”,因为一开始就创建了实例,所以每次用到的之后直接返回就好了。
public class Singleton{
private static Singleton singleton = new Singleton ();
private Singleton (){}
 public Singleton getInstance(){return singletion;}


懒汉式:

懒汉式的特点是延迟加载,比如配置文件,采用懒汉式的方法,顾名思义,懒汉么,很懒的,配置文件的实例直到用到的

时候才会加载。。。。。。


public class Singleton{
private static Singleton singleton = null;
public static synchronized synchronized getInstance(){
                 if(singleton==null){
                     singleton = new Singleton();
                 }
                return singleton;
            }
       } 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值