Java Arraylist源碼中的三個構造器和三種對應的初始化方法

ArrayList裡有三種構造函數,對應三種ArrayList的初始化方法。 第一種 容量為空初始化 源代碼: /** * Constructs an empty list with an initial capacity of ten. */ private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } 可使用如下方法初始化: List<String> fruit = new ArrayList<>(); fruit.add("apple"); fruit.add("pear"); 下面,來看一看代碼是如何一步一步執行的。 首先初始化arraylist: List<String> fruit = new ArrayList<>(); 呼叫A...

2024-05-10 · Ariel

字符串匹配,Leetcode 28,KMP算法

最近在做Leetcode,遇到有關字符串匹配的如下題目: 28. Find the Index of the First Occurrence in a String 要求從haystack 字符串裡找是否包含needle字符串,並找出首次出現位置。比如sadbutsad裡是否包含sad字符串。 發現除了暴力循環解法外,還有神奇的KMG算法可以把複雜度從O(m*n)簡化為...

2023-09-05 · Ariel

Gitlet design document

This is the design document for Gitlet project. Classes and Data Structures Main This is the entry point to Gitlet program. It takes in arguments from the command line and based on the command (the first element of the args array) calls the corresponding command in GitletRepository which will actually execute the logic of the command. It also validates the arguments based on the command to ensure that enough arguments were passed in. Fields This class has no fields and hence no associated state: it simply validates arguments and defers the execution to the `Gitlet`Repository class. Blob GItlet, like Git, is a content-addressable filesystem. Even one byte change in content will lead to a totally different blob object. To accomplish this, Blob class implements Serializable to save each different file content as blob object for future retrieve. Fields All the...

2023-06-15 · Ariel

用Java寫個簡單的Git:CS61B Gitlet項目筆記

在寫Git 原理學習筆記的時候,就有考慮要不要跟著網上的教程:Write yourself a Git! 用Python寫個或者是照抄一個Git,但是當時不會I/O的處理,就先放棄了。沒想到CS61B的其中一個Gitlet項目就是用Java寫一個簡單版本的Git(包含checkout,merge,reset等...

2023-06-13 · Ariel

Java 和 Python 的區別

最近開始學Java,感覺和Python蠻不一樣,於是在網上找找資料,看看二者的不同之處。 先分享一篇好玩又很有啟發的文章: 两年,我学会了所有的编程语言! 下面進入正題。 Java是編譯式的語言, Python是直譯式的語言? 想要清楚這個問題,要稍微了解下二者的程序是如何運行的。 Pytho...

2023-04-07 · Ariel

Git 原理學習筆記

之前學CS50W的時候學過一些Git指令覺得不好理解,這次開始CS61B課程之前又再次需要用Git。既然無可避免,那就花些時間試著了解看看git到底是什麼。 注:本文為初學者學習筆記,請謹慎參考。 名詞解釋: hash function,給予內容(value),通過hash function產生...

2023-02-18 · Ariel

9種方法寫Fibonacci(Python)

受A Python Guide to the Fibonacci Sequence啟發,我也來試試看用CS61A課程所學寫Fibonacci,感覺又好玩,又可以順便複習下課程。是的,好的課程一定要花些時間好好複習。 Fibonacci是什麼? Fibonacci,翻譯為斐波那契数。 請參考如下維基百科的定義。 source:Fibonac...

2023-01-18 · Ariel

CS61A 學習筆記和心得4-Tail Call

注:本文部分引用代碼來自CS61A(Structure and Interpretation of Computer Programs) Scheme作業,請小心劇透。個人學習筆記,請小心參考。 上一篇筆記提到了Read-Eval-Print-Loop,這篇筆記記錄其中的附加題-tail call optimization。 尾調用(tail call) 在计算机学裡,...

2023-01-11 · Ariel

CS61A 學習筆記和心得3-通過學習用Python寫個Scheme Interpreter來學習編程語言

注:本文引用代碼來自CS61A(Structure and Interpretation of Computer Programs) Scheme作業,請小心劇透。個人學習筆記,水平有限,請小心參考。 心得: 本來我想學Scheme版本的CS61A,弄了很久環境都沒有設置成功,然後轉學Python版本的CS61A。 沒想到課程第三章是先用一個python寫的...

2023-01-05 · Ariel

CS61A 學習筆記和心得1:Python 函數式編程/遞歸

CS61A(Fall 2022)第一部分的課程在介紹函數式編程,對應課本第一章,主要包含: 高階函數Higher-Order Functions 遞歸(一直call自己循環的函數) 也簡單帶過如下內容 Lambda( 匿名函數) Currying(只有一個argument的一串函數) Decorators(函數裝飾器,高階函...

2022-10-25 · Ariel

從0和1開始造一台電腦3-電腦如何記憶

註:本文為From Nand to Tetris 課程學習筆記,目的為總結個人所學。如有點閱,請謹慎參考。 前一篇文章(總結了電腦如何計算,但是電腦光是計算還不夠,還需要有時間的概念和記憶的能力。 如果我們要用loop計算1+2+3+4,我們就要先設定一個sum,讓sum=0,還要有用(i=0;i<4;...

2022-09-13 · Ariel

從0和1開始造一台電腦2-電腦如何運算/2補數/加法器/ALU

註:本文為From Nand to Tetris 課程學習筆記,目的為總結個人所學。如有點閱,請謹慎參考。 人類是高等動物,具有邏輯思考能力,所以我們使用文字和阿拉伯數字來傳遞信息。 但是有很多場合,當無法用文字和數字來處理信息時,也會用二進制來傳遞或處理信息。 二進制是最簡單的溝通語言 比如: 烽火 烽火有兩種狀態...

2022-09-12 · Ariel

從0和1開始造一台電腦1-邏輯門

在學習CS50wk0的時候有學到電腦最底層都是一堆的0和1,當時就產生一堆的好奇心。感嘆每天自己使用的電子產品竟然都是從0和1這麼簡單的開和關一步步構造出來的。 所以在看到Nand2tetris part1課程號稱從NAND邏輯閘開始造一台可以跑簡單程式的電腦時,沒多想就開始上課了。...

2022-09-10 · Ariel

CS50 wk9 Flask學習和Finance作業心得

學習心得: CS50 wk9 是學習用Flask框架做網絡應用,作業是做一個簡易的股票買賣網站。 wk8和wk9都是網頁相關的,一開始有些抗拒,感覺沒有前半部分的會涉及電腦底層知識的課程有趣。然後又一口氣教這麼多,壓力很大。 加上Finance是一個很大的作業,會不想下手。所以我改變想法,讓自己每天...

2022-07-09 · Ariel

CS50 wk8 TCP,IP,HTTP,HTML,CSS,JavaScript課程筆記

本週學習: TCP(Transmission Control Protocol) IP(Internet Protocol) HTTP(HyperText Transfer Protocol) DNS(Domain NameS) HTML CSS JavaScript DOM 本週課程前面40分鐘講解了Computer Networking相關知識,教授用傳輸信件這個方式來形象的解釋了互聯網是如何傳輸信息的。 在2016年的wk6課程中,教授是用google網上的信息這個例子來說明信息是如何...

2022-05-18 · Ariel
  | Copyright © -2025 Everydaydiva's Blog