數(shù)據(jù)結(jié)構(gòu)與算法
https://zhuanlan.zhihu.com/p/27005757?utm_source=weibo&utm_medium=social
http://crazyandcoder.tech/2016/09/14/android 算法與數(shù)據(jù)結(jié)構(gòu)-排序/
1校摩、排序
排序有內(nèi)部排序和外部排序胖喳,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序遵馆,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄心包,在排序過程中需要訪問外存。
1.1、 直接插入排序
思想:
將第一個(gè)數(shù)和第二個(gè)數(shù)排序畏梆,然后構(gòu)成一個(gè)有序序列
將第三個(gè)數(shù)插入進(jìn)去,構(gòu)成一個(gè)新的有序序列奈懒。
對第四個(gè)數(shù)奠涌、第五個(gè)數(shù)……直到最后一個(gè)數(shù),重復(fù)第二步磷杏。
代碼:
首先設(shè)定插入次數(shù)溜畅,即循環(huán)次數(shù),for(int i=1;i<length;i++)茴丰,1個(gè)數(shù)的那次不用插入达皿。
設(shè)定插入數(shù)和得到已經(jīng)排好序列的最后一個(gè)數(shù)的位數(shù)。insertNum和j=i-1贿肩。
2峦椰、設(shè)計(jì)模式
參考:Android開發(fā)中的一些設(shè)計(jì)模式
2.1、單例設(shè)計(jì)模式
單例主要分為:懶漢式單例汰规、餓漢式單例汤功、登記式單例。
特點(diǎn):
單例類只有一個(gè)實(shí)例
單例類必須自己創(chuàng)建自己的唯一實(shí)例
單例類必須給所有其他對象提供這一實(shí)例溜哮。
在計(jì)算機(jī)系統(tǒng)中滔金,像線程池色解,緩存、日志對象餐茵、對話框科阎、打印機(jī)等常被設(shè)計(jì)成單例。
懶漢式單例:
Singleton通過將構(gòu)造方法限定為private避免了類在外部被實(shí)例化忿族,在同一個(gè)虛擬機(jī)范圍內(nèi)锣笨,Singleton的唯一實(shí)例只能通過getInstance()方法訪問。(事實(shí)上道批,通過Java反射機(jī)制是能夠?qū)嵗瘶?gòu)造方法為private的類的错英,那基本上會(huì)使所有的Java單例實(shí)現(xiàn)失效。
它是線程不安全的隆豹,并發(fā)情況下很有可能出現(xiàn)多個(gè)Singleton實(shí)例椭岩,要實(shí)現(xiàn)線程安全,有以下三種方式:
1.在getInstance方法上加上同步
2.雙重檢查鎖定
3.靜態(tài)內(nèi)部類
這種方式對比前兩種璃赡,既實(shí)現(xiàn)了線程安全判哥,又避免了同步帶來的性能影響。
餓漢式單例:
餓漢式在創(chuàng)建類的同時(shí)就已經(jīng)創(chuàng)建好了一個(gè)靜態(tài)的對象供系統(tǒng)使用鉴吹,以后不再改變姨伟,所以天生是系統(tǒng)安全。
其他
https://juejin.im/post/5a37171af265da432d282fd6
https://github.com/Mr-YangCheng/ForAndroidInterview
原文鏈接:https://blog.csdn.net/xiangzhihong8/java/article/details/96280254
點(diǎn)擊下方鏈接免費(fèi)獲取Android進(jìn)階資料: