<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 哈哈的日子 閱讀(3907) 評論(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;
    }

    }
    }

    這個方法確實有點慢!還得想個好的方法!但是這個題目還真不難,頂多就是效率問題!  回復  更多評論
      
    主站蜘蛛池模板: 美女视频黄a视频全免费| 永久免费av无码入口国语片| 国产又大又粗又长免费视频| 久久亚洲精品中文字幕无码| 韩国免费a级作爱片无码| 亚洲色欲色欲www在线丝| 中文无码成人免费视频在线观看| 亚洲色自偷自拍另类小说| 91视频精品全国免费观看| 精品亚洲一区二区| 2021在线永久免费视频| 亚洲一级视频在线观看| 国产免费av片在线看| 亚洲成在人线在线播放无码| 午夜国产大片免费观看| 国产特黄一级一片免费| 久久精品国产96精品亚洲 | 亚洲精品一级无码中文字幕| 日本一区二区三区在线视频观看免费 | 污污网站18禁在线永久免费观看| 亚洲永久中文字幕在线| 一二三四免费观看在线视频中文版 | 久久久久亚洲AV无码观看 | 成人午夜免费福利视频| 亚洲精品蜜夜内射| 亚洲七七久久精品中文国产| 久久免费精品视频| 亚洲中文无码av永久| 四虎影在线永久免费观看| 免费看一区二区三区四区| 亚洲婷婷在线视频| 亚洲电影日韩精品| 97青青草原国产免费观看| 日本亚洲色大成网站www久久| 亚洲Av无码国产情品久久| 久久午夜伦鲁片免费无码| 免费观看亚洲人成网站| 亚洲精品免费在线观看| 日韩免费观看视频| 无码av免费网站| 一级毛片免费播放视频|