1. 
          

          1. 新聞動(dòng)態(tài)

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

            常見(jiàn)問(wèn)題 發(fā)布者:cya 2019-11-29 08:58 訪(fǎng)問(wèn)量:151

            01

            隨機算法 



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

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

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

            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;
            //計算數組中0的個(gè)數
            for(int i = 0;i < number.length && number[i] == 0; i++){
                 numberZero++;
               }
            //統計數組中的間隔數目
               int small = numberZero;
               int big = small + 1;

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

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




            02

            簡(jiǎn)述四大組件


            Activity、Service、ContentProvider 如 果 要 使 用 則 必 須 在A(yíng)ndroidManifest.xml 中 進(jìn) 行 注 冊 , 而B(niǎo)roadcastReceiver則有兩種注冊方式,靜態(tài)注冊和動(dòng)態(tài)注冊。其中靜態(tài)注冊就是指在A(yíng)ndroidManifest.xml中進(jìn)行注冊,而動(dòng)態(tài)注冊時(shí)通過(guò)代碼注冊。

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

            ServiceAndroid系統的服務(wù)(不是一個(gè)線(xiàn)程,是主程序的一部分),與Activity不同,它是不能與用戶(hù)交互的,不能自己?jiǎn)?dòng)的,須要調用Context.startService()來(lái)啟動(dòng),執行后臺,假設我們退出應用時(shí),Service進(jìn)程并沒(méi)有結束,它仍然在后臺行。

            BroadcastReceiver廣播接收器是一個(gè)專(zhuān)注于接收廣播通知信息,并做出相應處理的組件。

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




            03

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


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



            04

            Android線(xiàn)程間通信有幾種方式 


            1. Handler機制

            2. runOnUiThread(Runnable action)

            3. View.post(Runnable action)

            4. AsyncTask

            5. 廣播

            6. 使用EventBus、RxJava等框架




            05

            談?wù)剶到M與鏈表的區別 


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


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



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

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

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

            双腿国产亚洲精品无码不卡|国产91精品无码麻豆|97久久久久久久极品|无码人妻少妇久久中文字幕
                1.