国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

小米路由做網(wǎng)站服務(wù)器代運營靠譜嗎

小米路由做網(wǎng)站服務(wù)器,代運營靠譜嗎,重慶11月2日隔離,上海網(wǎng)站設(shè)計排名?博主主頁: 33的博客? ?文章專欄分類: Java從入門到精通? 🚚我的代碼倉庫: 33的代碼倉庫🚚 🫵🫵🫵關(guān)注我?guī)銓W更多數(shù)據(jù)結(jié)構(gòu)知識 目錄 1.前言2.集合架構(gòu)3.時間和空間復雜度3.1算法效率3.2時間復雜度3.2.1大O的漸進…

?博主主頁: 33的博客?
?文章專欄分類: Java從入門到精通?
🚚我的代碼倉庫: 33的代碼倉庫🚚
🫵🫵🫵關(guān)注我?guī)銓W更多數(shù)據(jù)結(jié)構(gòu)知識

在這里插入圖片描述

目錄

  • 1.前言
  • 2.集合架構(gòu)
  • 3.時間和空間復雜度
    • 3.1算法效率
    • 3.2時間復雜度
      • 3.2.1大O的漸進表示
      • 3.2.2常見時間復雜度舉例
    • 3.3空間復雜度
  • 4.包裝類
    • 4.1基本數(shù)據(jù)和對應(yīng)的包裝類:
    • 4.2裝箱和拆箱
  • 5.泛型
    • 5.1引出范型
    • 5.2語法
    • 5.3泛型類的使用
    • 5.4泛型是如何編譯
    • 5.5泛型的上界
    • 5.6泛型方法
  • 6.總結(jié)

1.前言

數(shù)據(jù)結(jié)構(gòu)是計算機存儲,組織數(shù)據(jù)的方式,指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合,從這篇文章開始,我們將一起進入數(shù)據(jù)結(jié)構(gòu)的學習,那么該如何學好數(shù)據(jù)結(jié)構(gòu)呢?博主的建議是多寫代碼,多思考,多畫圖!

本章重點

掌握數(shù)據(jù)結(jié)構(gòu)基本知識主要包括集合框架,時間和空間復雜度,算法效率,大O漸進表示,包裝類,泛型相關(guān)知識。


2.集合架構(gòu)

Java 集合框架Java Collection Framework ,又被稱為容器和其實現(xiàn)類classes 。
類和接口總覽:
在這里插入圖片描述


3.時間和空間復雜度

遇到一個算法,我們怎么衡量一個算法的好壞呢?

3.1算法效率

算法效率分析分為兩種:第一種是時間效率,第二種是空間效率。時間效率被稱為時間復雜度,而空間效率被稱作空間復雜度。

3.2時間復雜度

時間復雜度的定義:在計算機科學中,算法的時間復雜度是一個數(shù)學函數(shù),它定量描述了該算法的運行時間。一個算法執(zhí)行所耗費的時間,從理論上說,是不能算出來的,只有你把你的程序放在機器上跑起來,才能知道。但是我們需要每個算法都上機測試嗎?是可以都上機測試,但是這很麻煩,所以才有了時間復雜度這個分析方式。一個算法所花費的時間與其中語句的執(zhí)行次數(shù)成正比例,算法中的基本操作的執(zhí)行次數(shù),為算法的時間復雜度。

有些算法的時間復雜度存在最好、平均和最壞情況:

最壞情況:任意輸入規(guī)模的最大運行次數(shù)(上界)當說時間復雜度一般值最壞情況下
平均情況:任意輸入規(guī)模的期望運行次數(shù)
最好情況:任意輸入規(guī)模的最小運行次數(shù)(下界)

3.2.1大O的漸進表示

在計算時間復雜度時,我們不需要計算精確的執(zhí)行次數(shù),只需要大概的次數(shù),那么我們就剋用大O漸進表示法去掉那些對結(jié)果影響不大的項,簡明表示執(zhí)行的次數(shù)。
規(guī)則:

1、用常數(shù)1取代運行時間中的所有加法常數(shù)。
2、在修改后的運行次數(shù)函數(shù)中,只保留最高階項。
3、如果最高階項存在且不是1,則去除與這個項目相乘的常數(shù)。得到的結(jié)果就是大O階。

3.2.2常見時間復雜度舉例

例1.

void func2(int N) {int count = 0;for (int k = 0; k < 2 * N ; k++) {count++;       //時間復雜度2N}int M = 10;while ((M--) > 0) {count++;	//時間復雜度10}System.out.println(count);}

時間復雜度2N+10 為O(N)


例2.

void func3(int N, int M) {int count = 0;for (int k = 0; k < M; k++) {count++;   //時間復雜度M}for (int k = 0; k < N ; k++) {count++;	//時間復雜度N}System.out.println(count);}

時間復雜度M+N為O(M+N)


例3.

// 計算func4的時間復雜度?
void func4(int N) {int count = 0;for (int k = 0; k < 100; k++) {count++;	//時間復雜度100}System.out.println(count);}

時間復雜度100為O(1)


例4.

// 計算bubbleSort的時間復雜度?
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;}}}

假設(shè)array.length=N,那么第一次循環(huán)執(zhí)行N-1次,第二次循壞執(zhí)行N-2次,第三次循環(huán)執(zhí)行N-3…最后一次為1,那么總次數(shù)就是(N-1)+(N-2)+(N-3)+…1,等差數(shù)列求和結(jié)果為(NN-N)/2那么時間復雜度為O(NN)。


例5.

int binarySearch(int[] array, int value) {int begin = 0;int end = array.length - 1;while (begin <= end) {int mid = begin + ((end-begin) / 2);if (array[mid] < value)begin = mid + 1;else if (array[mid] > value)end = mid - 1;elsereturn mid;}return -1;}

在這里插入圖片描述
那么剩下1個數(shù)就需要時間復雜度O(log2^N)。


例6.

// 計算階乘遞歸factorial的時間復雜度?
long factorial(int N) {return N < 2 ? N : factorial(N-1) * N;}

遞歸復雜度=遞歸次數(shù)*每次遞歸后執(zhí)行的次數(shù)
時間復雜度=(N-1)*1=O(N)


例7.

int fibonacci(int N) {return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);}//2^n

3.3空間復雜度

空間復雜度是對一個算法在運行過程中臨時占用存儲空間大小的量度 ??臻g復雜度不是程序占用了多少bytes的空間,因為這個也沒太大意義,所以空間復雜度算的是變量的個數(shù)??臻g復雜度計算規(guī)則基本跟時間復雜度類似,也使用大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;}}}//輸出O(1)

例2.

int[] 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;}//O(N)

4.包裝類

在Java中,由于基本類型不是繼承自O(shè)bject,為了在泛型代碼中可以支持基本類型,Java給每個基本類型都對應(yīng)了一個包裝類型。

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

基本數(shù)據(jù)類型包裝類
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

4.2裝箱和拆箱

Integer a = 10;//裝箱
int b = 20;
Integer c=b;//基本類型轉(zhuǎn)變?yōu)榘b類型
Integer a = 10;
int c = a;//拆箱,包裝類型轉(zhuǎn)換為基本類型

public static void main(String[] args) {Integer a = 127;Integer b = 127;Integer c = 128;Integer d = 128;System.out.println(a == b);//trueSystem.out.println(c == d);//false}

為什么輸出結(jié)果一個是T一個是F呢,我們來看看源碼
在這里插入圖片描述
通過源碼我們知道,如果范圍在【-128,127】那么就返回數(shù)組中的值,否則就new一個對象。127在范圍內(nèi),那么直接返回cache[255]的值;128不在范圍內(nèi),久new一個 對象。


5.泛型

泛型:就是適用于許多許多類型。從代碼上講,就是對類型實現(xiàn)了參數(shù)化。

5.1引出范型

實現(xiàn)一個類,類中包含一個數(shù)組成員,使得數(shù)組中可以存放任何類型的數(shù)據(jù),也可以根據(jù)成員方法返回數(shù)組中某個下標的值?

class MyArray {public Object[] array = new Object[10];public Object getPos(int pos) {return this.array[pos];}public void setVal(int pos,Object val) {this.array[pos] = val;}    }public class TestDemo {public static void main(String[] args) {MyArray myArray = new MyArray();myArray.setVal(0,10);myArray.setVal(1,"hello");//字符串也可以存放String ret = myArray.getPos(1);//編譯報錯//強行轉(zhuǎn)化String ret =(String)myArray.getPos(1);System.out.println(ret);}}

但是我們發(fā)現(xiàn),雖然任何類型的數(shù)據(jù)都可以存放,但是獲得的時候報錯,必須強制轉(zhuǎn)換。但是,當代碼很多的變量的時候,我們就不知道該變量是什么類型的,每次都要返回定義的時候去查看是什么類型,就比較繁瑣。更多情況下,我們還是希望他只能夠持有一種數(shù)據(jù)類型。而不是同時持有這么多類型。所以,泛型的主要目的:就是指定當前的容器,要持有什么類型的對象。讓編譯器去做檢查。此時,就需要把類型,作為參數(shù)傳遞。需要什么類型,就傳入什么類型。


5.2語法

class MyArray<T> {//添加< >表示這個類是泛型public T[] array = (T[])new Object[10];//這句代碼是錯誤的,這樣寫只是為了不讓編譯器報錯public T getPos(int pos) {return this.array[pos];}public void setVal(int pos,T val) {this.array[pos] = val;}}public class TestDemo {public static void main(String[] args) {MyArray<Integer> myArray = new MyArray<>();//傳入<Integer>后,每次存儲數(shù)據(jù)時會檢查存入的數(shù)據(jù)是不是我傳入的類型,獲取數(shù)據(jù)的時候也不需要強制轉(zhuǎn)化。myArray.setVal(0,10);myArray.setVal(1,12);int ret = myArray.getPos(1);System.out.println(ret);myArray.setVal(2,"bit");}}

5.3泛型類的使用

語法:


泛型類<參數(shù)類型> 變量名; //定義一個泛型類引用
MyArray<Integer> a;
new  泛型類<類型實參>(構(gòu)造方法實參); // 示例化一個泛型類對象
MyArray<Integer> myArray = new MyArray<>();

5.4泛型是如何編譯

在編譯過程中將所有的T替換為object,這種機制稱為擦除機制,在運行的時候并沒有泛型的概念。
通過命令:javap -c 查看字節(jié)碼文件,所有的T都是Object:
在這里插入圖片描述
在編譯的過程當中,將所有的T替換為Object這種機制,我們稱為:擦除機制。
Java的泛型機制是在編譯級別實現(xiàn)的。

實例化的時候不能實例化一個泛型數(shù)組。

T[] a=new T[5];//這樣定義泛型是錯誤的,這個時候我們不知道到底定義的什么類型的數(shù)組
//以我們現(xiàn)在的知識,一般定義數(shù)組的時候,我們采取以下方式:
object[] a=new obje[5];

5.5泛型的上界

在定義泛型類時,有時需要對傳入的類型變量做一定的約束,可以通過類型邊界來約束。
語法

class 泛型類名稱<類型形參 extends 類型邊界> {...}
MyArray<Integer> l1;        // 正常,因為 Integer 是 Number 的子類型
MyArray<String> l2;     // 編譯錯誤,因為 String 不是 Number 的子類型

5.6泛型方法

定義語法:

方法限定符 <類型形參列表> 返回值類型 方法名稱(形參列表) { ... }

示例:

public class Util {//靜態(tài)的泛型方法 需要在static后用<>聲明泛型類型參數(shù)public static <E> void swap(E[] array, int i, int j) {E t = array[i];array[i] = array[j];array[j] = t;}}//使用Integer[] a = { ... };Util.swap(a, 0, 9);//使用類型推導Util.<Integer>swap(a, 0, 9);//不使用類型推導

6.總結(jié)

本篇介紹數(shù)據(jù)結(jié)構(gòu)基本知識主要包括集合框架,時間和空間復雜度,算法效率,大O漸進表示,包裝類,泛型相關(guān)知識,其中關(guān)于用泛型定義數(shù)組的內(nèi)容,博主比并沒有深入講解,感興趣的同學可以查看其他博主的內(nèi)容。

下期預(yù)告:順序表

http://aloenet.com.cn/news/36463.html

相關(guān)文章:

  • 簡單的網(wǎng)站開發(fā)購物鏈接
  • wordpress webvr網(wǎng)絡(luò)優(yōu)化器
  • 建高鐵站賺錢嗎百度資源共享鏈接分享組
  • 烏市seo網(wǎng)絡(luò)營銷流程網(wǎng)頁怎么優(yōu)化
  • 那個視頻網(wǎng)站做公開課比較好如何查詢百度搜索關(guān)鍵詞排名
  • 如何做閑置物品自己的網(wǎng)站外鏈工廠
  • 風險網(wǎng)站怎么解決方案軟文廣告經(jīng)典案例800字
  • 網(wǎng)站建設(shè)規(guī)劃ppt模板網(wǎng)站網(wǎng)絡(luò)推廣企業(yè)
  • 無錫市網(wǎng)站建設(shè)百度公司全稱叫什么
  • 大慶市住房與城鄉(xiāng)建設(shè)局網(wǎng)站品牌宣傳文案范文
  • 小白學做網(wǎng)站買什么書哪里能搜索引擎優(yōu)化
  • 利用html做博客網(wǎng)站做百度推廣多少錢
  • 網(wǎng)站建設(shè)方案書 備案百度排名查詢
  • 網(wǎng)站建設(shè)要考慮哪些企業(yè)如何進行網(wǎng)絡(luò)營銷
  • 做圖網(wǎng)站有哪些東西嗎建網(wǎng)站用什么軟件
  • 用java做視頻網(wǎng)站app投放渠道有哪些
  • django做的網(wǎng)站舉例資源網(wǎng)站優(yōu)化排名軟件
  • 跨越速運在黑龍江黑河網(wǎng)點網(wǎng)絡(luò)優(yōu)化工程師主要做什么
  • 望牛墩做網(wǎng)站每日軍事新聞
  • 廣西中國建設(shè)銀行網(wǎng)站首頁百度網(wǎng)站收錄提交
  • 做網(wǎng)站指導seo流量工具
  • 菲律賓 做菠菜網(wǎng)站視頻外鏈在線生成
  • jquery 素材的網(wǎng)站seo基本概念
  • 長沙專門做網(wǎng)站建設(shè)的公司2024年1月新冠高峰期
  • 企業(yè)網(wǎng)站建立流程百度站長平臺鏈接
  • 2345電視劇網(wǎng)站免費鄭州seo服務(wù)公司
  • sae wordpress 圖片北京網(wǎng)站優(yōu)化站優(yōu)化
  • 學做蛋糕網(wǎng)站如何讓自己網(wǎng)站排名提高
  • 針對網(wǎng)站做搜索引擎做優(yōu)化網(wǎng)盤資源共享網(wǎng)站
  • 微交易網(wǎng)站建設(shè)實時積分榜