美團實習| 週記(二)

####本週知識清單:

  • 開發小tips
  • Java基礎之集合類
  • 一些小感悟

1.開發小tips

看項目代碼的時候發現了一些不起眼但覺得蠻實用的小tips,在實習隨筆|週記(一)寫的tools命名空間就是一點,可幫助快速預覽佈局展示效果。接下來再提一些小技巧。

a .值得收藏的AS插件 ,另推薦可用Statistic插件統計項目代碼總行數、Alibaba Java Coding Guidelines插件幫助規範代碼。

b.你不知道的TextUtils用法,比如TextUtils.isDigitsOnly(string) 可檢查字符串中是否全是數字。

c.TextView屬性大全,比如android:drawableXXX系列配合android:drawablePadding 適合在文字側放固定大小的圖片。

d.TextView/string.xml冷門小技巧:佔位轉換符%1$s%2$d等的用法,其中%1$s表示第一個字符串、%2$d表示第二個整數。使用示例如下:

  • 在string.xml中先定義好格式:
<string name="instance">String.xml佔位轉換符:我叫%1$s,今年%2$d歲了,身高%3$f米。</string>
  • 代碼實現:
TextView tv=(TextView)findViewById(R.id.tv);
String format = getResources().getString(R.string.instance);
String result= String.format(format ,"minmin", 21 ,164.5);
tv.setText(result);
  • 輸出結果:
String.xml佔位轉換符:我叫minmin,今年21歲了,身高164.5米。


2.Java基礎之集合類

a.作用:負責保存和盛裝其他數據,又稱容器類

  • 用於存儲數量不等的對象,並可實現常用的數據結構,如棧、隊列等
  • 用於保存具有映射關係的關聯數組

和數組的區別:

  • 數組元素可以是基本類型,也可以是對象
  • 集合元素只能是對象

b.體系結構:大致可分爲Set、List、Queue 和Map四種體系。

  • Set:代表無序、不可重複的集合
  • List:代表有序、可重複的集合
  • Map:代表具有映射關係的集合
  • Queue:代表一種隊列集合

形象記憶

下圖給出Java集合類之間的關係。

c.篇幅有限,主要介紹上圖中紅色標註的幾個類/接口(需要了解源碼請點擊類名)。

(1)Collection接口

  • 是List、Set和Queue接口的父接口,該接口中定義的方法可操作以上三種集合。
  • 常用方法:添加對象add()、刪除對象remove()、清空容器clear()、判斷容器是否爲空isEmpty()等。

(2)List系列:有序、可重複

  • ArrayList特點:
    • 底層結構是數組,可用索引實現快速查找
    • 非線程安全,建議在單線程中才使用ArrayList,而在多線程中可以選擇Vector或者CopyOnWriteArrayList
    • 是動態數組,相比於數組容量可實現動態增長。默認初始容量爲10,每次擴容爲原來的1.5倍
  • LinkedList特點:
    • 底層結構是鏈表,增刪速度快
    • 非線程安全
    • 是一個雙向循環鏈表,也可以被當作堆棧、隊列或雙端隊列
    • 包含一個非常重要的內部類Entry,是雙向鏈表節點所對應的數據結構,其包括的屬性有『當前節點所包含的值』、『上一個節點』、『下一個節點』
  • Vector特點:
    • 底層結構是數組,可用索引實現快速查找
    • 使用了synchronized關鍵字,是線程安全的,比ArrayList開銷更大,訪問更慢
    • 默認初始容量爲10,默認每次擴容爲原來的2倍,可通過capacityIncrement屬性設置。

(3)Set系列:無序、不可重複

  • HashSet特點:
    • 不能保證元素的排列順序
    • 使用Hash算法來存儲集合中的元素,有良好的存取和查找性能
    • 非同步,多線程併發要注意線程同問題
    • 集合元素值可爲null
    • 通過equal()判斷兩個元素是否相等,並兩個元素的hashCode()返回值也相等
  • TreeSet特點:
    • 是SortedSet接口的實現類,根據元素實際值的大小進行排序
    • 採用紅黑樹的數據結構來存儲集合元素
    • 非同步
    • 支持兩種排序方法:自然排序(默認情況)和定製排序。前者通過實現Comparable接口中的compareTo()比較兩個元素之間大小關係,然後按升序排列;後者通過實現Comparator接口中的compare()比較兩個元素之間大小關係,實現定製排列。

(4)Iterator接口

  • 用於遍歷Collection中的集合中的元素,又稱迭代器。本身並不提供盛裝對象的能力。
  • 必須依賴於Collection對象,獨立存在無意義。
  • 常用方法:判斷集合是否還有下一個元素hasNext(),可通過remove()刪除集合中上一次next()返回的集合元素。

(5)Map接口

  • 保存具有映射關係的數據。
  • Map集合中保存着兩組值,一組用於保存Map中的key,一組用於保存Map中的value。
    • key和value可以是任何引用類型的數據。
    • key不允許重複,key沒有順序。可以把key集合看成一個Set集合,它們的存儲形式、子類命名也非常相似。
    • value允許重複,value通過索引查找。可以把value集合看成一個List集合。
  • 常用方法:成對添加put()和刪除remove()key-value對,獲取指定key的valueget()、判斷是否包含指定keycontainsKey()和指定valuecontainsValue()等。

(6)Map系列

  • HashMap特點:
    • 基於AbstractMap類,實現了Map、Cloneable(能被克隆)、Serializable(支持序列化)接口,
    • 無序
    • 非線程安全
    • 允許存在一個爲null的key和任意個爲null的value
    • 採用鏈表散列的數據結構,即數組和鏈表的結合
    • 初始容量爲16,填充因子默認爲0.75,擴容時是當前容量翻倍,即2capacity
  • LinkedHashMap特點:
    • 繼承自HashMap類
    • 有序,默認爲插入順序,還可以是訪問順序
    • 非線程安全
    • 允許存在一個爲null的key和任意個爲null的value
    • 內部通過Entry維護了一個雙向鏈表,負責維護Map的迭代順序
  • Hashtable特點:
    • 基於Map接口和Dictionary類
    • 無序
    • 線程安全,開銷比HashMap大,如果多線程訪問一個Map對象,使用Hashtable更好
    • 不允許使用null作爲key和value
    • 底層基於哈希表結構
    • 初始容量爲11,填充因子默認爲0.75,擴容時是容量翻倍+1,即2capacity+1
  • TreeMap特點:
    • 是SortedMap接口的實現類
    • 有序,根據key對節點進行排序
    • 支持兩種排序方法:自然排序定製排序。前者所有key必須實現Comparable接口且所有key應該是一個類的對象;後者通過傳入一個Comparator接口對象負責對多有key進行排序。
    • 非線程安全
    • 採用紅黑樹的數據結構

3.一些小感悟

最近大家都進入了白熱化狀態,離項目上線的日子越來越近,重心也從需求開發到糾錯改Bug,每個人都變得很謹慎。記得下班最晚的上週五,一大早拿到了測試用例文檔之後,要對照着用例的每一條每個點,檢查要求是否合理、運行後實際結果是否無誤。一度以爲要週末加班要繼續搞(雖然我也一直是加班學習沒閒着…),好在團結力量大,在提測之前的deadline終於大功告成。

那天還有個小插曲,承包了一晚上的笑點,就是可愛的田豐前輩,臨提測才發現頁面UI不對,就像熱鍋的螞蟻一樣七上八下,在調試的時候一度抓不上包,自亂陣腳以爲出了大bug,就在這時,旁邊的楊宇前輩很淡定的把數據線從他的電腦拔出來,場面可以說很歡樂了。

自測之後,在測試用例評審會上見到了QA,之前聽聞公司QA是很嚴格的,不由得肅然起敬。其實這和公司價值觀的其中一點『追求卓越』是分不開的,非常注重代碼質量,對線上事故也是嚴肅對待,員工入職的第一天就要研讀CaseStudy,看看之前事業羣研發曾犯過的錯以及開發紅線。

導師前陣子請了陪產假,他的開發部分也就由我接手了,這兩天組裏要進行代碼review,於我而言算是個大事,畢竟代碼不是自己寫的。思來想去,覺得用UML圖去刻畫類組成和邏輯實現流程最好不過了,突然非常感激大三最後一門課程『信息系統分析與設計』讓我對UML愛不釋手!(畢竟之前總用PhotoShop…)雖然課上用的是Visio作圖,不過個人更推薦ProcessOn,交互設計上更勝一籌。

公司裏有這樣一句開發者的信仰流傳在民間,簡直振聾發聵,那就是『要麼牛逼,要麼滾蛋』,小菜鳥不禁渾身顫抖,所以…共勉吧!

工作大樓

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章