學Java也有好一陣子了,當涉及到Java的實際應用時發現自己的基礎跟不上。基礎不行,概念不清,對以后的學習造成不小的負面影響。仔細分析后,自己總結了一些Java里面很基礎的東西,希望以后把基礎打好,高手就不必過目了呀,哈哈~~~
一、有關super跟this的區別。
區別 | Super | This |
范圍 | 由子類訪問父類的內容 | 直接訪問本類中的內容 |
訪問屬性 | super.父類屬性,如果屬性沒有被覆寫,則也可以不寫super。 | This.本類屬性。 |
訪問方法 | super.父類方法(),如果方法沒有被覆寫,則可以不用加super也表示調用父類中的方法。 | this.本類方法(),可以不寫this,也表示調用本類的方法。 |
訪問構造方法 | super是訪問父類中的構造方法,必須放在首行。 | this 是訪問本類中的其他構造方法,必須放在首行。 |
二、重載和重寫的區別。
區別 | 重載 | 重寫/覆寫 |
單詞 | Overloading | Override |
概念 | 方法名稱相同,參數列表不同。 | 方法名稱相同,參數列表相同,方法的訪問權限不能更嚴格。 |
范圍 | 發生在一個類中。 | 發生在繼承關系中,由子類進行覆寫。 |
三、Vector和ArrayList
1.vector是線程同步的,所以它也是線程安全的,而arraylist是線程異步的,是不安全的。如果不考慮到線程的安全因素,一般用
arraylist效率比較高。
2.如果集合中的元素的數目大于目前集合數組的長度時,vector增長率為目前數組長度的100%,而arraylist增長率為目前數組長度
的50%.如過在集合中使用數據量比較大的數據,用vector有一定的優勢。
ArrayList 和Vector是采用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,都允許直接序號索引元素,
但是插入數據要設計到數組元素移動等內存操作,所以索引數據快插入數據慢,Vector由于使用了synchronized方法(線程安全)所以性能上比ArrayList要差,
LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行向前或向后遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入數度較快!
四、arraylist和linkedlist
1.ArrayList是實現了基于動態數組的數據結構,LinkedList基于鏈表的數據結構。
2.對于隨機訪問get和set,ArrayList覺對優于LinkedList,因為LinkedList要移動指針。
3.對于新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。
這一點要看實際情況的。若只對單條數據插入或刪除,ArrayList的速度反而優于LinkedList。
但若是批量隨機的插入刪除數據,LinkedList的速度大大優于ArrayList. 因為ArrayList每插入一條數據,要移動插入點及之后的所有數據。
五、HashMap與TreeMap
1、HashMap通過hashcode對其內容進行快速查找,而TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。
HashMap中元素的排列順序是不固定的)。
2、HashMap通過hashcode對其內容進行快速查找,而TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap(HashMap中元素的排列順序是不固定的)。集合框架”提供兩種常規的Map實現:HashMap和TreeMap (TreeMap實現SortedMap接口)。
3、在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會更好。使用HashMap要求添加的鍵類明確定義了hashCode()和 equals()的實現。 這個TreeMap沒有調優選項,因為該樹總處于平衡狀態。
六、hashtable與hashmap
1.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現
2.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
3.值:只有HashMap可以讓你將空值作為一個表的條目的key或value
七、Set中的數據對象沒有順序且不可以重復。
List中的數據對象有順序且可以重復。