<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 175  文章 - 202  trackbacks - 0
    <2007年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    第一個Blog,記錄哈哈的生活

    常用鏈接

    留言簿(16)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    收藏夾

    Java links

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    最近一個朋友做猜數字游戲的解法,我也嘗試了一下,在做數據生成器的時候,就希望做一個類型無關的,其實這個問題在去迅雷面試的時候就被問到,不過當時想都沒想就放棄了,雖然面試當天回來的時候,完成了一下,但結果還是差強人意。所以想借這個機會弄一下。

    在記錄一條數據(Record)的時候,我本來使用了 List 實例化成 ArrayList,然后開始算,不過借助 JProbe 看了一下,List.size() 和 List.get(i) 這兩個方法因為調用次數太多而占用了大部分的時間,所以第一想法是改成數組。

    當我 new Record 的時候,使用的是 list ,自然想把這個 List<T> 轉換成數組 T[] ,不過非常麻煩的是 list.toArray(T[]) 中的 T[] 不知道如何得到,不知道如何弄到 T[] 的實例,new T[list.size()] 是沒辦法的。

    第一個反應是從 list 或是 List<T> 定義的 class 中得到成員的類型,然后使用 Arrays.newInstance 來創建一個,我花了好長的時間都沒有能夠得到,后來和同事聊天時,猜測是不是編譯完的 class 文件中根本就沒有類型的信息,不過當時沒能確定。

    晚上接著猜數字的時候,舊事重提,google 了一下,看到了一個非常好的文章。
    http://www.ibm.com/developerworks/cn/java/j-jtp01255.html
    將泛型說明的非常清楚,其中一句是這樣的“Java 語言中的泛型基本上完全在編譯器中實現,由編譯器執行類型檢查和類型推斷,然后生成普通的非泛型的字節碼。這種實現技術稱為擦除(erasure)(編譯器使用泛型類型信息保證類型安全,然后在生成字節碼之前將其清除)”。

    驗證了我的想法,在 class 文件中,根本就沒有泛型的信息。

    實際上,聲明一個泛型數據的方法是

    T[] array = (T[])new Object[length];

    這樣,問題解決,對 Java 泛型的理解增加了一些。
    posted on 2007-08-08 00:39 哈哈的日子 閱讀(3906) 評論(3)  編輯  收藏 所屬分類: Java

    FeedBack:
    # re: 創建泛型數據的方法,由 List.toArray(T[]) 想到。 2007-08-10 11:20 李敏
    能否把那個迅雷面試的題目貼出來一下,想看看,這篇文章看的暈暈的!  回復  更多評論
      
    # re: 創建泛型數據的方法,由 List.toArray(T[]) 想到。 2007-08-10 22:48 哈哈的日子
    題目就是給定一些值,如 0~9,生成所有這些值的組合,如

    1234567890
    1234567809
    1234567980  回復  更多評論
      
    # re: 創建泛型數據的方法,由 List.toArray(T[]) 想到。 2007-08-25 21:24 李敏
    無非就是生成沒有重復的10位數的一個集合,沒有什么難的!

    public class Untitled1 {

    public static void main(String[] args) {

    for (long i = 1000000000L; i < 9999999999L; i++) {
    String num = String.valueOf(i);
    String[] bit = num.split("");
    if (checkNum(bit)) {
    System.out.println(num);
    }
    }

    }

    public static boolean checkNum(String[] num) {
    Set set = new HashSet();
    for (int i = 1; i < num.length; i++) {
    set.add(String.valueOf(num[i]));
    }
    if (set.size() != 10) {
    return false;
    } else {
    return true;
    }

    }
    }

    這個方法確實有點慢!還得想個好的方法!但是這個題目還真不難,頂多就是效率問題!  回復  更多評論
      
    主站蜘蛛池模板: 亚洲精品无码鲁网中文电影| 免费观看国产网址你懂的| 成人一级免费视频| 青草青草视频2免费观看| 国产精品亚洲综合网站| 国产亚洲精品美女久久久久久下载| 亚洲人成自拍网站在线观看| 亚洲日韩精品无码专区| 亚洲AV无码国产精品永久一区| 亚洲爆乳无码专区www| 久久亚洲精品成人无码| 美女视频黄a视频全免费网站一区| 国产精品亚洲专区在线播放| 美女视频黄a视频全免费网站一区| 日韩毛片一区视频免费| 一级做a爰片性色毛片免费网站| 亚洲黄片手机免费观看| a视频在线免费观看| 久久久久高潮毛片免费全部播放| 精品国产无限资源免费观看| 最近2019中文免费字幕| 国产免费午夜a无码v视频| 亚洲五月午夜免费在线视频| 国产亚洲综合色就色| 亚洲激情黄色小说| 亚洲成a人片在线不卡一二三区| 无套内射无矿码免费看黄| 91在线视频免费观看| 91免费国产精品| 久久久久免费看黄A片APP| 国产免费怕怕免费视频观看| 久久亚洲国产精品五月天婷| 亚洲福利在线观看| 亚洲熟妇无码一区二区三区| 九九免费精品视频在这里| 久久精品国产免费| 性做久久久久久免费观看| 亚洲国产精品日韩| 亚洲视频手机在线| 国产亚洲精品91| 无码人妻精品中文字幕免费|