更多課程 選擇中心
        Java培訓

        400-111-8989

        Java培訓 > Java教程  > 正文

        Java程序員編程的10個正確姿勢

        • 發布:Java培訓
        • 來源:Java教程
        • 時間:2017-12-11 14:16

        1.將數組轉化為列表

        將數組轉化為一個列表時,程序員們經常這樣做:

        List list = Arrays.asList(arr);

        Arrays.asList()會返回一個ArrayList對象,ArrayList類是Arrays的一個私有靜態類,而不是java.util.ArrayList類,java.util.Arrays.ArrayList類有set()、get()、contains()方法,但是沒有增加元素的方法,所以它的大小是固定的,想要創建一個真正的ArrayList類。

        你應該這樣做:

        ArrayList arrayList = new ArrayList(Arrays.asList(arr));

        ArrayList的構造方法可以接受一個集合類型,剛好它也是java.util.Arrays.ArrayList的超類。

        2.判斷一個數組是否包含一個值

        程序員們經常這樣做:

        Set set = new HashSet(Arrays.asList(arr));return set.contains(targetValue);

        這段代碼起作用,但是沒有必要把一個數組轉化成列表,轉化為列表需要額外的時間。

        它可以像下面那樣簡單:

        Arrays.asList(arr).contains(targetValue);

        或者是:

        for(String s:arr){

        if(s.equals(targetValue)){

        return true;

        }}return false;

        第一種方法比第二種更容易讀。

        3.在一個循環中刪除一個列表中的元素

        思考下面這一段在循環中刪除多個元素的的代碼

        ArrayList list = new ArrayList(Arrays.asList("a","b","c","d"));for(int i=0;i

        輸出結果是:

        [b,d]

        在這個方法中有一個嚴重的錯誤。當一個元素被刪除時,列表的大小縮小并且下標變化,所以當你想要在一個循環中用下標刪除多個元素的時候,它并不會正常的生效。

        你也許知道在循環中正確的刪除多個元素的方法是使用迭代,并且你知道java中的foreach循環看起來像一個迭代器,但實際上并不是。考慮一下下面的代碼:

        ArrayList list = new ArrayList(Arrays.asList("a","b","c","d"));for(String s:list){ if(s.equals("a")){

        list.remove(s); }}

        它會拋出一個ConcurrentModificationException異常。

        相反下面的顯示正常:

        ArrayList list = new ArrayList(Arrays.asList("a","b","c","d"));Iterator iter = list.iterator();while(iter.hasNext()){String s = iter.next();

        if(s.equals("a")){

        iter.remove(); }}

        .next()必須在.remove()之前調用。在一個foreach循環中,編譯器會使.next()在刪除元素之后被調用,因此就會拋出ConcurrentModificationException異常,你也許希望看一下ArrayList.iterator()的源代碼。

        4.Hashtable與HashMap的對比

        就算法而言,哈希表是數據結構的一個名字。但是在java中,這個數據結構的名字是HashMap。

        Hashtable與HashMap的一個重要不同點是Hashtable是同步的。所以你經常不需要Hashtable,相反HashMap經常會用到。

        5.在集合中使用原始類型

        Java中原始類型與無界通配符類型很容易混合在一起,拿Set來說,Set是一個原始類型,而Set是無界的通配符類型。考慮下面使用原始類型List作為參數的代碼:

        public static void add(List list,Object o){ list.add(o);}pulbic static void main(String[] args){ List list = new ArrayList();

        add(list,10);

        String s = list.get(0);

        這段代碼會拋出一個異常:

        Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

        at ...

        使用原生類型集合是危險的,這是因為原生類型集合跳過了泛型類型檢查,并且不是安全的,在Set、Set和Set 中有很大的不同。

        6.訪問級別

        程序員們經常使用public作為類字段的修飾符,可以很簡單的通過引用得到值,但這是一個壞的設計,按照經驗,分配給成員變量的訪問級別應該盡可能的低。

        7.ArrayList與LinkedList的對比

        當程序員們不知道ArrayList與LinkedList的區別時,他們經常使用ArrayList,因為它看起來比較熟悉。然而,它們之前有巨大的性能差別。

        簡而言之,如果有大量的增加刪除操作并且沒有很多的隨機訪問元素的操作,應該首先LinkedList。

        8.可變與不可變

        不可變對象有許多的優點,比如簡單,安全等等。但是對于每一個不同的值都需要一個獨立的對象,太多的對象可能會造成大量的垃圾回收。當選擇可變與不可變時應該有一個平衡。

        一般的,可變對象用來避免產生大量的中間對象。一個典型的例子是連接大量的字符串。

        如果你用一個不可變的字符串,你會產生很多需要進行垃圾回收的對象。這很浪費CPU的時間,使用可變對象是正確的解決方案(比如StringBuilder)。

        String result="";for(String s: arr){result = result + s;}

        有時在某些情況下也是需要可變對象的,比如將可變對象作為參數傳入方法,你不用使用很多語句便可以得到多個結果。

        另外一個例子是排序和過濾:當然,你可以寫一個方法來接收原始的集合,并且返回一個排好序的集合,但是那樣對于大的集合就太浪費了。

        9.父類與子類的構造函數

        Java程序員編程的10個正確姿勢

        這個編譯期錯誤的出現是父類默認的構造方法未定義,在java中,如果一個類沒有定義構造方法,編譯器會默認的為這個類添加一個無參的構造方法。

        如果在父類中定義了構造方法,在這個例子中是Super(String s),編譯器就不會添加默認的無參構造方法,這就是上面這個父類的情形。

        子類的構造器,不管是無參還有有參,都會調用父類的無參構造器。因為編譯器試圖在子類的兩個構造方法中添加super()方法。

        但是父類默認的構造方法未定義,編譯器就會報出這個錯誤信息。

        想要修復這個問題,可以簡單的通過1)在父類中添加一個Super()構造方法,像下面這樣:

        public Super(){System.out.println("Super");}

        或者2)移除父類自定義的構造方法,或者3)在子類的構造方法中調用父類的super(value)方法。

        10.””還是構造器

        有兩種方式可以創建字符串

        //1.使用字符串Stringx = "abc";//2.使用構造器String y = new String("abc")

        有什么區別?

        下面的例子會給出一個快速的答案:

        String a = "abc";String b = "abc";System.out.println(a==b);//trueSystem.out.println(a.equals(b));//trueString c = new String("abc");String d = new String("abc");System.out.println(c==d);//falseSystem.out.println(c.equals(d));//true

        感謝大家閱讀由java培訓機構分享的“Java程序員編程的10個正確姿勢”希望對大家有所幫助,更多精彩內容請關注Java培訓官網

        免責聲明:本文由小編轉載自網絡,旨在分享提供閱讀,版權歸原作者所有,如有侵權請聯系我們進行刪除

        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:Java教程到處都是究竟怎樣能學好Java?
        下一篇:Java初學者必備4大核心基礎知識
        12大要點讓你的Java開發所向披靡~

        12大要點讓你的Java開發所向披靡~

        學習Java最好的12本免費在線電子書

        學習Java最好的12本免費在線電子書

        Java常用日志框架介紹

        Java常用日志框架介紹

        一篇文章了解RPC框架原理

        一篇文章了解RPC框架原理

        • 掃碼領取資料

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        貴州省

        福建省

        • 達內廈門軟件園中心
        廣西省

        海南省

        国产高清情侣视频2019年,限制电影福利在线观看,23伊人大香蕉 百度 好搜 搜狗
        <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>