小知識點【刷題向,整理】
charArray toString char[] 直接toString 獲得的會是一個像這樣的[C@6a2437ef序列,因此仍是用這個方法:String.valueOf 。這讓我想到以前有道題(Anagram),我先將string變成char[],排序,而後放在hash表中,最後發現比較的時候明明兩個相同的char[]就是不能相等,才發現這個問題。用String.valueOf解決,當初還想過序列化。(詳見這道題的筆記)
float vs double, int vs long float是單精度,4 bytes, 小數點後6-7位;double雙精度, 8 bytes, 小數點後15位。Java中默認浮點數類型爲double,因此若是直接寫成 float af = 0.3444 會報錯,應該寫成 float af = 0.344f, 或者float af = (float)0.344.同理是int 和 Long,默認定點數類型是int因此定義的時候也須要加上32L表示Long類。轉換 xxx.[Target]Value 這個方法用來轉換類型很經常使用,好比float to int, af.intValue(). 可是使用int時要注意,這是一個類的方法,定義成int i是沒辦法是用的,必須變成Integer i (Integer 與 int 的區別 )。強制轉換與精度 低精度向高精度能夠直接強制轉換,反之則會面臨精度丟失的問題,通常用BigDeceimal解決。
HashMap的遍歷
boolean[] bool數組默認都是false.有時候hashset, hashmap空間太大能夠考慮試試bool數組
Arrays.binarySearch是二分法查找,但它的返回值是(-(插入點) - 1), 這個在有一道Google的題裏面很巧妙地用到了。binarySearch didn't find
關於原碼補碼反碼有一篇很棒的文章:true code, complementary code, ones-complementary code
Iterator 舉個栗子,iterator用於遍歷Collection. Collection中主要有set, queue, list。原本能夠直接for遍歷,可是這樣耦合度過高,爲了表現「可以訪問collection又不暴露其具體的細節」,而產生了用一個iterator來遍歷的想法。Collection繼承了Iterable接口,從而能夠經過構建一個Iterator = list.iterator() , 繼而經過對這個新建的iterator訪問來遍歷list. Iterator有三個方法: hasNext(), next(), remove(). 通常這樣用while(next()) {next()...}, remove()刪除當前next()獲得的元素。Iterator用在Flatten類型的題目中:通常要考慮cursor來指定當前位置,或者是兩個queue/stack來存放當前位置
Collection裏面的細分類 先貼一個很好的介紹Collection你們族 。能夠簡單來講,Array存儲的是基本類型(primitive)而且大小固定,Collection存儲任意類型而且能夠自動擴容。Collection是個你們族,裏面包括List, Queue, Set, Deque... 而以Queue爲例,它僅僅是一個接口,能夠用LinkedList或者PriorityQueue來實現。具體關係看下面這張大圖:
StringBuilder 概括一下StringBuilder的常見方法:1)構造:通常是空着構造或者能夠直接賦值(char, boolean, string...) 2)append(object) 3) delete(start, end) deleteCharAt 4) indexOf 5) insert 6) reverse 7) toString (* 有時候連用很好用,好比reverse().toString())
HashMap的空間優化表明題目(Leetcode 387), 有時候能夠考慮用一個很大的整形數組來優化hashmap的空間問題(256)。將hashmap的key值(若是能夠int化)存爲int[key] = value的形式,甚至能夠更優化爲bit型
歡迎關注本站公眾號,獲取更多信息