靜態類和靜態方法

靜態類和靜態方法

    若是一個類要被聲明爲static的,只有一種狀況,就是靜態內部類。算法

    靜態內部類實際上與普通類(即類名必須與文件名同樣的頂級類)同樣,只是靜態內部類在某一類的內部定義了而已,既然是類,要想使用就必須實例化。概念上與靜態變量、靜態方法是不同的,不要被「靜態」兩個字迷惑了(不要覺得凡是靜態的東西就不須要實例化就能夠直接使用,靜態內部類是有區別),並且只有靜態內部類,而沒有靜態類(頂級類)的概念。數組

例子:多線程

public class Singleton{ private Singleton(){} private static class SingletonHolder{ private final static Singleton instance; } public Singleton getInstance(){ return SingletonHolder.instance; } }

    靜態方法只能訪問靜態成員,實例方法能夠訪問靜態和實例成員。之因此不容許靜態方法訪問實例成員變量,是由於實例成員變量是屬於某個對象的,而靜態方法在執行時,並不必定存在對象。靜態方法中也不能使用關鍵字this。app

倒排索引

Inverted Index函數

    若是翻譯成轉置索引可能更好懂,它就至關於作了矩陣轉置。性能

    倒排索引是一種索引方法,被用來存儲在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。this

反射

    反射API中提供的動態代理也是很是強大的功能,能夠原生實現AOP中 的方法攔截功能。正如英文單詞reflection的含義同樣,使用反射API的時候就好像在看一個Java類在水中的倒影同樣。知道了Java類的內部 結構以後,就能夠與它進行交互,包括建立新的對象和調用對象中的方法等。spa

    這種交互方式與直接在源代碼中使用的效果是相同的,可是又額外提供了運行時刻的靈活性。使用反射的一個最大的弊端是性能比較差。相同的操做,用反射API所需的時間大概比直接的使用要慢一兩個數量級。不過如今的JVM實現中,反射操做的性能已經有了很大的提高。線程

    Java 反射API的第一個主要做用是獲取程序在運行時刻的內部結構。翻譯

枚舉類型

Enumerated Type

    enum 類型不支持 public 和 protected 修飾符的構造方法,所以構造函數必定要是 private 或 friendly 的。也正由於如此,因此枚舉對象是沒法在程序中經過直接調用其構造方法來初始化的。
    因爲 enum 類型的值其實是經過運行期構造出對象來表示的,因此在 cluster 環境下,每一個虛擬機都會構造出一個同義的枚舉對象。於是在作比較操做時候就須要注意,若是直接經過使用等號 ( ‘ == ’ ) 操做符,這些看似同樣的枚舉值必定不相等,由於這不是同一個對象實例。

多線程

    Java中實現多線程有兩種方法:繼承Thread類、實現Runnable接口,在程序開發中只要是多線程,確定永遠以實現Runnable接口爲主,由於實現Runnable接口相比繼承Thread類有以下優點:

一、能夠避免因爲Java的單繼承特性而帶來的侷限;
二、加強程序的健壯性,代碼可以被多個線程共享,代碼與數據是獨立的;
三、適合多個相同程序代碼的線程區處理同一資源的狀況。

下面是經過實現Runnable接口實現的多線程程序,代碼以下:

lass MyThread implemments Runnable{ private int ticket =5; public void run(){ for(int i=0;i<10;i++){ if(ticket>0){ System.out.println("ticket="+ticket--); }}}} public class RunnableDemo{ public static void main (String[] args){ MyThread my = new MyThread(); new Thread(my).start(); new Thread(my).start(); new Thread(my).start(); }}

多路歸併算法

    歸併排序也是一種使用分治法來實現的有效排序算法,它是現代計算機創始人John von Neumann於1945年發明的。

    歸併排序在衆多排序算法中既是穩定排序,又有不錯的效率,同時,歸併排序不只能夠用於內排序,還能夠用於外排序。

歸併排序的思路以下(以二路歸併爲例):

將數組劃均分爲兩個子數組;
對兩個字數組進行排序;
將排序好的兩個字數組歸併。
所謂 N路歸併 是指將數組均分爲N個子數組,將字數組排序後再歸併。所以二路歸併是歸併排序的最通常的狀況。

例子:

樂橙谷

def msort(array): length=len(array) if length ==1; return array else: mid=length/2 left = msort(array[0:mid) right = msort(array[mid:length]) return merge(left,right)

非遞歸

def msort(array) step=1 while step<length: for left in range(0,length-step,2*step): result=merge(array[left:left+step]), array[left+step:min(left+2*step,length)]) array=array[0:left]+result+array[min(left+2*step,length)] step=step*2 return array def merge(left,right): llen=len(left) lcur=0 rlen=len(right) rcur=0 result=[] while lcur<llen and rcur<rlen: lone= left[lcur] rone=right[rone] result.append{min(lone,rone)} if lone<rone: lcur+=1 else: rcur+=1 result+=lefte[lcur:] result+=right[rcur:] return result


文章轉載自 樂橙谷http://www.lechenggu.com/bbs/topic/57fdb5c19c73a464f54e7574
相關文章
相關標籤/搜索