日韩国产精品99成人不卡在线无毒|狠狠躁夜夜爽一级二级精品|亚洲日日噜噜孕妇中文字幕|日韩久草中文三级片

新聞動態(tài)

隨機算法,四大組件,Context,線程間通信,數(shù)組和鏈表

常見問題 發(fā)布者:cya 2019-11-29 08:58 訪問量:325

01

隨機算法 



問題:從撲克牌中隨機抽 5 張牌,判斷是不是順子,即這 5 張牌是不是連續(xù)的。2-10 為數(shù)字本身,A 為 1,J 為 11,Q 為 12,K 為 13,而大小王可以看成任意的 數(shù)字

解題思路:我們可以把5張牌看成是由5個數(shù)字組成的數(shù)組。大小王是特殊的數(shù)字,我們可以把它們都定義為0,這樣就可以和其他的牌區(qū)分開來。

首先把數(shù)組排序,再統(tǒng)計數(shù)組中0的個數(shù),最后統(tǒng)計排序之后的數(shù)組中相鄰數(shù)字之間的空缺總數(shù)。如果空缺的總數(shù)小于或者等于0的個數(shù),那么這個數(shù)組就是連續(xù)的,反之則不連續(xù)。如果數(shù)組中的非0數(shù)字重復出現(xiàn),則該數(shù)組是不連續(xù)的。換成撲克牌的描述方式就是如果一幅牌里含有對子,則不可能是順子。

import java.util.Arrays;

public class Solution {

public boolean isContinuous(int[] number){
if(number == null){
return false;
   }
   Arrays.sort(number);
   int numberZero = 0;
   int numberGap = 0;
//計算數(shù)組中0的個數(shù)
for(int i = 0;i < number.length && number[i] == 0; i++){
     numberZero++;
   }
//統(tǒng)計數(shù)組中的間隔數(shù)目
   int small = numberZero;
   int big = small + 1;

while(big<number.length){
//兩個數(shù)相等,有對子,不可能是順子
if(number[small] == number[big]){
return false;
     }
     numberGap+= number[big] - number[small] - 1;
     small = big;
     big++;
   }

return (numberGap>numberZero)?false:true;
 }
}




02

簡述四大組件


Activity、Service、ContentProvider 如 果 要 使 用 則 必 須 在AndroidManifest.xml 中 進 行 注 冊 , 而BroadcastReceiver則有兩種注冊方式,靜態(tài)注冊和動態(tài)注冊。其中靜態(tài)注冊就是指在AndroidManifest.xml中進行注冊,而動態(tài)注冊時通過代碼注冊。

Activity通常展現(xiàn)為一個用戶操作的可視化界面。它為用戶提供了一個完成操作指令的窗口。 (https://mp.weixin.qq.com/s/CgfeMT9YtzW2jBavG47i1Q) (Activity的來由)

ServiceAndroid系統(tǒng)的服務(wù)(不是一個線程,是主程序的一部分),與Activity不同,它是不能與用戶交互的,不能自己啟動的,須要調(diào)用Context.startService()來啟動,執(zhí)行后臺,假設(shè)我們退出應(yīng)用時,Service進程并沒有結(jié)束,它仍然在后臺行。

BroadcastReceiver廣播接收器是一個專注于接收廣播通知信息,并做出相應(yīng)處理的組件。

ContentProvider(內(nèi)容提供者)主要用于對外共享數(shù)據(jù),也就是通過ContentProvider把應(yīng)用中的數(shù)據(jù)共享給其它應(yīng)用訪問,其它應(yīng)用能夠通過ContentProvider對指定應(yīng)用中的數(shù)據(jù)進行操作。




03

談?wù)剬ndroid中context的理解 


Context是一個抽象基類。在翻譯為上下文,也可以理解為環(huán)境,是提供一些程序的運行環(huán)境基礎(chǔ)信息。Context下有兩個子類,ContextWrapper是上下文功能的封裝類,而ContextImpl則是上下文功能的實現(xiàn)類。而ContextWrapper又有三個直接的子類, ContextThemeWrapper、Service和Application。其中,ContextThemeWrapper是一個帶主題的封裝類,而它有一個直接子類就是Activity,所以Activity和Service以及Application的Context是不一樣的,只有Activity需要主題,Service不需要主題。Context一共有三種類型,分別是Application、Activity和Service。這三個類雖然分別各種承擔著不同的作用,但它們都屬于Context的一種,而它們具體Context的功能則是由ContextImpl類去實現(xiàn)的,因此在絕大多數(shù)場景下,Activity、Service和Application這三種類型的Context都是可以通用的。不過有幾種場景比較特殊,比如啟動Activity,還有彈出Dialog。出于安全原因的考慮,Android是不允許Activity或Dialog憑空出現(xiàn)的,一個Activity的啟動必須要建立在另一個Activity的基礎(chǔ)之上,也就是以此形成的返回棧。而Dialog則必須在一個Activity上面彈出(除非是System Alert類型的Dialog),因此在這種場景下,我們只能使用Activity類型的Context,否則將會出錯。getApplicationContext()和getApplication()方法得到的對象都是同一個application對象,只是對象的類型不一樣。Context數(shù)量 = Activity數(shù)量 + Service數(shù)量 + 1 (1為Application)



04

Android線程間通信有幾種方式 


  1. Handler機制

  2. runOnUiThread(Runnable action)

  3. View.post(Runnable action)

  4. AsyncTask

  5. 廣播

  6. 使用EventBus、RxJava等框架




05

談?wù)剶?shù)組與鏈表的區(qū)別 


  1. 數(shù)組是將元素在內(nèi)存中連續(xù)存放,由于每個元素占用內(nèi)存相同,可以通過下標迅速訪問數(shù)組中任何元素。但是如果要在數(shù)組中增加一個元素,需要移動大量元素,在內(nèi)存中空出一個元素的空間,然后將要增加的元素放在其中。同樣的道理,如果想刪除一個元素,同樣需要移動大量元素去填掉被移動的元素。如果應(yīng)用需要快速訪問數(shù)據(jù),很少或不插入和刪除元素,就應(yīng)該用數(shù)組。


  2. 鏈表恰好相反,鏈表中的元素在內(nèi)存中不是順序存儲的,而是通過存在元素中的指針聯(lián)系到一起。比如:上一個元素有個指針指到下一個元素,以此類推,直到最后一個元素。如果要訪問鏈表中一個元素,需要從第一個元素開始,一直找到需要的元素位置。但是增加和刪除一個元素對于鏈表數(shù)據(jù)結(jié)構(gòu)就非常簡單了,只要修改元素中的指針就可以了。如果應(yīng)用需要經(jīng)常插入和刪除元素你就需要用鏈表數(shù)據(jù)結(jié)構(gòu)了。



關(guān)鍵字: 隨機算法 四大組件 Context 線程間通信 數(shù)組和鏈表

文章連接: http://www.hsjyfc.com.cn/cjwt/624.html

版權(quán)聲明:文章由 晨展科技 整理收集,來源于互聯(lián)網(wǎng)或者用戶投稿,如有侵權(quán),請聯(lián)系我們,我們會立即刪除。如轉(zhuǎn)載請保留