国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)】復(fù)雜度&包裝&泛型

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】復(fù)雜度&包裝&泛型。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1.時間和空間復(fù)雜度

1.1時間復(fù)雜度

1.2空間復(fù)雜度

2.包裝類

2.1基本數(shù)據(jù)類型和對應(yīng)的包裝類

2.2裝箱和拆箱

//阿里巴巴面試題

3.泛型

3.1擦除機制?

3.2泛型的上界


1.時間和空間復(fù)雜度

1.1時間復(fù)雜度

定義:一個算法所花費的時間與其語句的執(zhí)行次數(shù)成正比,算法中的基本操作的執(zhí)行次數(shù),為算法的時間復(fù)雜度。

public class Main {
    public static void main(String[] args) {
        int n = 10;
        int count = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                count++; //F(n)=n^2
            }
        }
        for (int k = 0; k < 2*n; k++) {
            count++; //F(n)=2n
        }
        for (int m = 0; m < 10; m++) {
            count++; //F(n)=10
        }
    }
}

所以此時F(n)=n^2+2n+10,?但實際情況下只需要計算大概執(zhí)行次數(shù),即——大O漸進法:

大O漸進法

1> 用常數(shù)1代替所有的加法常數(shù);

2> 只保留最高階項;

3> 如果最高階項存在且不是1,則去除與這個項相乘的常數(shù)。

例:F(n) = 2n^2 + 5n + 100?= O(n^2)

注意

二分查找 O(n) = log2N

遞歸 O(n) = 遞歸的次數(shù)*每次遞歸后執(zhí)行的次數(shù)

public class Main {
    long factorial(int n) { //階乘
        return n<2?n:factorial(n-1)*n; //O(n)=n
    }
    long fibonacci(int n) { //菲波那切數(shù)列
        return n<2?n:factorial(n-1)+factorial(n-2); //O(n)=2^n
    }
}

拓展:平均復(fù)雜度

定義:所有情況下代碼執(zhí)行的次數(shù)累加起來,再除以所有情況數(shù)量,即為平均復(fù)雜度。

例如下述代碼,判斷x在循環(huán)中出現(xiàn)的位置,有n+1種情況:1<=x<=n 和?n<x,

所以平均復(fù)雜度為=((1+2+3+……+n) + n)/ n+1

 public int Function(int n, int x)
 {
    int sum = 0;
    for (int i = 1; i <= n; ++i)
    {
        if (i == x)
            break;
        sum += i;
    }
    return sum;
}

1.2空間復(fù)雜度

定義:空間復(fù)雜度是一個算法在運行時臨時占用存儲空間大小的量度,即計算的是變量的個數(shù)。

public class Test {
    //實例1:使用了常數(shù)個額外空間,空間復(fù)雜度為O(1)
    //冒泡排序
    void bubbleSort(int[] array) {
        for (int end = array.length; end > 0; end--) {
            boolean sorted = true;
            for (int i = 1; i < end; i++) {
                if (array[i - 1] > array[i]) {
                    Swap(array, i - 1, i);
                    sorted = false;
                }
            } if
            (sorted == true) {
                break;
            }
        }
    }
    //實例2:動態(tài)開辟了N個空間,空間復(fù)雜度為O(N)
    //菲波那切數(shù)列
    long[] fibonacci(int n) {
        long[] fibArray = new long[n + 1];
        fibArray[0] = 0;
        fibArray[1] = 1;
        for (int i = 2; i <= n ; i++) {
            fibArray[i] = fibArray[i - 1] + fibArray [i - 2];
        }
        return fibArray;
    }
    //實例3:遞歸調(diào)用了N次,開辟了N個棧幀,每個棧幀使用了常數(shù)個空間,空間復(fù)雜度為O(N)
    //階乘遞歸
    long factorial(int N) {
        return N < 2 ? N : factorial(N-1)*N;
    }
}

2.包裝類

2.1基本數(shù)據(jù)類型和對應(yīng)的包裝類

基本數(shù)據(jù)類型

包裝類
byte Byte
short Short
int Integer
long Long
float

Float

double

Double
char Character
boolean Boolean

2.2裝箱和拆箱

裝箱:基本類型——>包裝類型

拆箱:包裝類型——>基本類型

public class Test {
    public static void main(String[] args) {
        int a = 10;

        Integer i = a;//自動裝箱
        Integer ii = new Integer(a);//顯示裝箱
        Integer iii = new Integer(a);//顯示裝箱

        int m = i.intValue();//顯示拆箱
        float ff = i.intValue();//拆成對應(yīng)的類型
        int fff = a;//自動拆箱
    }
}

//阿里巴巴面試題

public class Test {
    public static void main(String[] args) {
        Integer a = 127;
        Integer b = 127;

        Integer c = 128;
        Integer d = 128;

        System.out.println(a==b);//true
        System.out.println(c==d);//false
    }
}

原因:裝箱時底層調(diào)用了valueOf方法,本質(zhì)是一個范圍在-128~127之間的數(shù)組。

3.泛型

先來看看一道編程題,編程要求:創(chuàng)建一個可以存放任何類型數(shù)據(jù)的數(shù)組。

解:所有類的父類默認為Object類,所以可以創(chuàng)建一個Object數(shù)組用來存放不同類型的元素:

class MyArray {
    public Object[] objects = new Object[10];//創(chuàng)建Object類數(shù)組
    public Object getPos(int pos) {//訪問數(shù)組
        return objects[pos];
    }
    public void setVal(int pos,Object val) {//賦值數(shù)組
        objects[pos] = val;
    }
}
public class Test {
    public static void main(String[] args) {
        MyArray myArray = new MyArray();
        //此時可以將不同類型的元素放入數(shù)組中
        myArray.setVal(0,"123");
        myArray.setVal(1,10);
        //由于父類是Object類型,訪問時必須強制類型轉(zhuǎn)換
        int val = (int)myArray.getPos(1);
        System.out.println(val);//10
    }
}

我們發(fā)現(xiàn)上述代碼有些繁瑣,但用泛型來解這道題就會簡單可讀很多:?

定義:通俗來講,就是適用于許多許多類型,從代碼上講,就是對類型實現(xiàn)了參數(shù)化(傳遞類型)。

意義:在編譯時幫我們進行類型的檢查和轉(zhuǎn)換,注意在運行時沒有泛型這一概念,即JVM中沒有泛型。

語法:class 泛型類名稱 <類型形參列表> { 代碼塊?}

常見類型形參列表:E - Element、K - Key、V - Value、N - Number、T - Type、S/U/V等 - 第二、第三、第四個類型。

注意:不能new泛型類型的數(shù)組。

class MyArray <T> { //T是一個占位符,表示當前類是一個泛型類
    public T[] objects = (T[]) new Object[10];//這種寫法不是很好,改良版見下
    public T getPos(int pos) {
        return objects[pos];
    }
    public void setVal(int pos,T val) {
        objects[pos] = val;
    }
}
public class Test1 {
    public static void main(String[] args) {
        MyArray<Integer> myArray1 = new MyArray<Integer>();//指定類型為Integer 
        myArray1.setVal(0,1);                //這里的Integer可不寫
        myArray1.setVal(1,2);
        int val = myArray1.getPos(1);
        System.out.println(val);//2
        MyArray<String> myArray2 = new MyArray<String>();//指定類型為String
        myArray2.setVal(0,"hello");         //這里的String可不寫
        myArray2.setVal(1,"world");
        String ret = myArray2.getPos(1);
        System.out.println(ret);//world
    }
}

3.1擦除機制?

定義:在編譯過程中,將所有的T替換為Object,這種機制稱為擦除機制。

編譯器生成的字節(jié)碼在運行期間并不包含泛型的類型信息。

class MyArray <T> {
    public Object[] objects =new Object[10];
    public T getPos(int pos) {
        return (T)objects[pos];//強轉(zhuǎn)
    }
    public void setVal(int pos,Object val) {
        objects[pos] = val;
    }
}

3.2泛型的上界

?寫一個泛型類,其中有個方法,用來求數(shù)組中的最大值:

class Alg<T extends Comparable<T>> { //擦除為一個實現(xiàn)了Comparable接口的類型
    public T findMax(T[] array) {    //即限制了T的邊界(上界),使其為Comparable的子類或Comparable本身
        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if(max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}
class Alg2 {
    public static<T extends Comparable<T>> T findMax(T[] array) { //靜態(tài)泛型方法
        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if(max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}
public class Test {
    public static void main(String[] args) {
        Alg<Integer> alg = new Alg<>();
        Integer[] array = {1,9,3,7,5,4};
        Integer max = alg.<Integer>findMax(array);//此處Integer可不寫
        System.out.println(max);
    }

    public static void main2(String[] args) {
        Integer[] array = {1,9,3,7,5,4};
        Integer max = Alg2.<Integer>findMax(array);//此處Integer可不寫
        System.out.println(max);  //靜態(tài)方法通過類名調(diào)用
    }
}

這一點點只是開胃菜,后面還有更多有趣的知識等著我們?nèi)W(xué)習!

痛并快樂著捏?~ ~?文章來源地址http://www.zghlxwxcb.cn/news/detail-436403.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】復(fù)雜度&包裝&泛型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】時間復(fù)雜度與空間復(fù)雜度

    【數(shù)據(jù)結(jié)構(gòu)】時間復(fù)雜度與空間復(fù)雜度

    在學(xué)習C語言的時候,大多數(shù)的小伙伴們并不會對算法的效率了解,也許算法也是一個陌生的領(lǐng)域,當進入了數(shù)據(jù)結(jié)構(gòu)這個模塊,就應(yīng)該對算法的效率做一個清晰的認識。但是算法的效率是什么呢?這里就引出來時間復(fù)雜度與空間復(fù)雜度的概念了。 算法效率 指的是算法解決問

    2024年02月07日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)入門 — 時間復(fù)雜度、空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)入門 — 時間復(fù)雜度、空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)_空間復(fù)雜度_時間復(fù)雜度講解_常見復(fù)雜度對比 本文介紹數(shù)據(jù)結(jié)構(gòu)中的時間復(fù)雜度和空間復(fù)雜度 ***文章末尾,博主進行了概要總結(jié),可以直接看總結(jié)部分*** 博主博客鏈接:https://blog.csdn.net/m0_74014525 點點關(guān)注,后期持續(xù)更新系列文章 算法效率指的是算法在處理數(shù)據(jù)時

    2024年02月13日
    瀏覽(30)
  • 數(shù)據(jù)結(jié)構(gòu)--時間復(fù)雜度與空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)--時間復(fù)雜度與空間復(fù)雜度

    在計算機科學(xué)中,算法的時間復(fù)雜度是一個函數(shù),它定量描述了該算法的運行時間。一個算法執(zhí)行所耗費的時間,從理論上說,是不能算出來的,只有程序在機器上跑起來,才能知道,但是如果所有的算法都需要在機器上運行起來去測試時間復(fù)雜度就會很麻煩,所以才有了時

    2024年02月16日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)——時間復(fù)雜度和空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)——時間復(fù)雜度和空間復(fù)雜度

    1.算法效率 2.時間復(fù)雜度 3.空間復(fù)雜度 4. 常見時間復(fù)雜度以及復(fù)雜度oj練習 1.算法效率 1.1 如何衡量一個算法的好壞 如何衡量一個算法的好壞呢?比如對于以下斐波那契數(shù)的計算 我們看到雖然用遞歸的方式實現(xiàn)斐波那契很簡單,但是簡單一定代表效率高嗎? 我們接著往下看。

    2024年02月13日
    瀏覽(23)
  • 數(shù)據(jù)結(jié)構(gòu)——時間復(fù)雜度與空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)——時間復(fù)雜度與空間復(fù)雜度

    目錄 一.什么是空間復(fù)雜度與時間復(fù)雜度 1.1算法效率 1.2時間復(fù)雜度的概念 1.3空間復(fù)雜度的概念 二.如何計算常見算法的時間復(fù)雜度 2.1大O的漸近表示法 ?使用規(guī)則 三.如何計算常見算法的空間復(fù)雜度 3.1 大O漸近表示法 3.2 面試題——消失的數(shù)字 ?3.3 面試題——旋轉(zhuǎn)數(shù)組 分為兩

    2024年02月07日
    瀏覽(14)
  • 數(shù)據(jù)結(jié)構(gòu) --- 復(fù)雜度概念及計算講解(時間復(fù)雜度,空間復(fù)雜度)

    數(shù)據(jù)結(jié)構(gòu) --- 復(fù)雜度概念及計算講解(時間復(fù)雜度,空間復(fù)雜度)

    今天沒有sao話,今天認真學(xué)習 前言: 經(jīng)常刷題的人都知道,我們在解決一道題時可能有多個解法,那么如何判斷那個解法才是最優(yōu)解呢? 我們通常從代碼的兩個方面進行判斷:1.時間 2.空間。 –?–?–?–?–?–?–?–?–?–?–?–?–?–?–?–?–?–?

    2024年03月22日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu)之時間復(fù)雜度與空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)之時間復(fù)雜度與空間復(fù)雜度

    目錄 1.算法效率 1.2算法的復(fù)雜度 1.3復(fù)雜度對于校招的重要性 ?編輯2.時間復(fù)雜度 空間復(fù)雜度: 1.1 如何衡量一個算法的好壞? 比方說我們非常熟悉的斐波拉契數(shù)列: 遞歸實現(xiàn)方式非常簡潔,但一定好嗎?如何衡量其好與壞? 定義: 算法在編寫成可執(zhí)行程序后,運行時需要

    2024年02月05日
    瀏覽(27)
  • 數(shù)據(jù)結(jié)構(gòu):時間復(fù)雜度和空間復(fù)雜度計算

    算法效率分析分為兩種:第一種是時間效率,第二種是空間效率。時間效率被稱為時間復(fù)雜度, 而空間效率被稱作空間復(fù)雜度。 時間復(fù)雜度主要衡量的是一個算法的運行速度,而空間復(fù)雜度主 要衡量一個算法所需要的額外空間,在計算機發(fā)展的早期,計算機的存儲容量很小

    2024年02月11日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu):算法(特性,時間復(fù)雜度,空間復(fù)雜度)

    數(shù)據(jù)結(jié)構(gòu):算法(特性,時間復(fù)雜度,空間復(fù)雜度)

    算法(Algorithm)是對 特定問題求解步驟 的一種描述,它是指令的有限序列,其中的每條指令表示一個或多個操作。 一個算法必須總在執(zhí)行有窮步之后結(jié)束,且每一步都可在有窮時間內(nèi)完成。 算法必須是有窮的,而程序可以是無窮的 算法中每條指令必須有確切的含義,對于

    2024年02月06日
    瀏覽(27)
  • 算法的時間復(fù)雜度和空間復(fù)雜度(數(shù)據(jù)結(jié)構(gòu))

    算法的時間復(fù)雜度和空間復(fù)雜度(數(shù)據(jù)結(jié)構(gòu))

    目錄 1、算法效率 1如何衡量一個算法的好壞 2算法的復(fù)雜度 2、時間復(fù)雜度 1時間復(fù)雜度的概念 2大O的漸進表示法 2時間復(fù)雜度計算例題 1、計算Func2的時間復(fù)雜度 2、計算Func3的時間復(fù)雜度 3、計算Func4的時間復(fù)雜度 4、計算strchr的時間復(fù)雜度 5、計算BubbleSort的時間復(fù)雜度 6、計算

    2024年02月03日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包