java概念(2)
重載和重寫
重載:同一個類中,方法名相同,參數不同
重寫:父子類中,子類重新定義父類的方法
多態
? 多態:同一種行為,不同的對象有不同的表現形式。
? 重載 編譯時根據參數決定調用的方法,即編譯時的多態性。
? 重寫 運行時根據對象類型調用子類方法,即運行時的多態性。
優點:子類可以重寫,提高了重用性
接口和抽象類的區別
抽象類
使用abstract修飾;
不能使用new來實例化對象;
抽象類不一定包含抽象方法,可以有具體的方法;
接口
使用interface修飾;
接口不能被實例化;
一個類只能繼承一個類,但可以實現多個接口;
接口中方法均為抽象方法;
接口中不能包含實例域或靜態方法。
注意:抽象類主要做父類,提供公共的屬性和方法,便與重用。
接口提供一種規范,目的是降低耦合,比抽象類 抽象程度更高。
序列化 ?
序列化: 把對象轉換為字節序列 保存到流 。
實現方式:
(1) 將 被 序 列 化 的 類 實 現Serializable 接口 進行標識。
class Student implements Serializable{}
(2)使用流進行讀/寫
ObjectOutputStream objectStream=new ObjectOutputStream(
new FileOutputStream(new File(“d:\student.txt”));
objectStream.writeObject(objectStream);
objectStream.close();
(3) 反序列化: 將字節序列恢復為對象 。
ObjectInputStream objectStream=new ObjectInputStream(
? new FileInputStream(new File(“d:\student.txt”)));
? Studentstudent=(Student)objectStream.readObject();
5.Java中集合框架
要點:
Java集合類由兩個接口派生:Collection和Map
Collection分兩大部分:List和Set
List,Queue是Java提供的隊列實現
Map是映射接口,每個元素都是一個key-value鍵值對
Set、List、Map 集合,最常用 HashSet、ArrayList、HashMap
List、Map、Set 區別
List:有序、可重復 集合,集合中每個元素都有 對應順序索引。
? List 默認按元素添加順序 設置元素的索引,可以通過索引來訪問指定位置元素。
? List接口集合:ArrayList、LinkedList、Vector、Stack。
Set接口不允許重復
? 常用實現類有HashSet、LinkedHashSet和TreeSet。
Map接口采用鍵值對Map的存儲方式,保存具有映射關系的數據,
? key值不允許重復,可以為null。如果已經有重復的key,則新的value會覆蓋該key原來對應的value。
? 常用實現類有HashMap、LinkedHashMap、TreeMap等。
7. HashMap 和 HashTable 有什么區別?
要點:
HashMap與Hashtable是Map接口的兩個典型實現。都是采用了hash表數據結構來實現,可以快速定位元素。存儲時,根據key的哈希值決定元素存放的位置。
HashMap繼承自AbstractMap類。實現了Map接口。
Hashtable繼承自Dictionary類,Dictionary類是一個已經被廢棄的類。父類已經不推薦使用,因此它的子類Hashtable也很少用了。
Hashtable是JDK1.0引入的,是線程安全的,適用于多線程環境
HashMap是JDK1.2引入的,非線程安全的,適用于單線程環境。不保證存取的順序性的,也就是說遍歷HashMap的時候,得到的元素的順序與添加元素的順序是不同的。
HashMap是允許key和value為null值的,只能有一個key為null。它用containsValue和containsKey方法判斷是否包含對應鍵值對;
HashTable鍵值對都不能為空,否則包空指針異常。
8 .Java 中 ArrayList 和 LinkedList 以及Vector的區別?
要點:
ArrayList是一個動態數組Object[],是List類的典型實現。它允許任何符合規則的元素插入甚至包括null。每一個ArrayList都有一個初始容量(10),該容量代表了數組的大小。隨著容器中的元素不斷增加,容器的大小也會隨著增加。在每次向容器中增加元素的同時都會進行容量檢查,當快溢出時,就會進行擴容操作。所以如果我們明確所插入元素的多少,最好指定一個初始容量值,避免過多的進行擴容操作而浪費時間、效率。
ArrayList擅長于隨機訪問。同時ArrayList是非同步的。
LinkedList是List接口的另一個實現,除了可以根據索引訪問集合元素外,LinkedList還實現了Deque接口,可以當作雙端隊列來使用,也就是說,既可以當作“棧”使用,又可以當作隊列使用。
LinkedList的實現機制與ArrayList的實現機制完全不同,ArrayLiat內部以數組的形式保存集合的元素,所以隨機訪問集合元素有較好的性能;LinkedList內部以鏈表的形式保存集合中的元素,所以隨機訪問集合中的元素性能較差,但在插入刪除元素時有較好的性能。
Vector與ArrayList相似,但是Vector是線程同步的。所以說Vector是線程安全的動態數組。它的操作與ArrayList幾乎一樣。
9.HashSet是如何保證數據不可重復的?
要點:
HashSet的底層其實就是HashMap,只是HashSet是實現了Set接口并且把數據作為Key值,而value值一直使用一個相同的虛值來保存.由于HashMap的Key值本身就不允許重復,并且在HashMap中如果Key/value相同時,會用新的Value覆蓋掉舊的Value,然后返回舊的Value,內部執行終會返回一個false,導致插入失敗,這樣就保證了數據的不可重復性.
10.Collection和Collections區別
要點:
? Collection是集合的頂層結構,提供了集合的公共操作的規范
Collections是一個靜態的工具類,提供了集合常見的操作實現,比如排序,搜索,反序等,簡化開發中常見的功能。
void reverse(List list)//反轉
void shuffle(List list)//隨機排序
void sort(List list)//按自然排序的升序排序
void sort(List list, Comparator c)//定制排序
void swap(List list, int i , int j)//交換兩個索引位置的元素
void rotate(List list, int distance)//旋轉。當distance為正數時,將list后distance個元素整體移到前面。當distance為負數時,將 list的前distance個元素整體移到后面
int binarySearch(List list, Object key)//對List進行二分查找
int max(Collection coll)//根據元素的自然順序,返回最大的元素。
int max(Collection coll, Comparator c)//根據定制排序,返回最大元素,
void fill(List list, Object obj)//用指定的元素代替指定list中的所有元素。
int frequency(Collection c, Object o)//統計元素出現次數
int indexOfSubList(List list, List target)
//統計target在list中第一次出現的索引
boolean replaceAll(List list, Object oldVal, Object newVal)
元素。
int frequency(Collection c, Object o)//統計元素出現次數
int indexOfSubList(List list, List target)
//統計target在list中第一次出現的索引
boolean replaceAll(List list, Object oldVal, Object newVal)
//用新元素替換舊元素
標簽:java,HashMap,List,ArrayList,元素,list,接口,概念
來源: https://blog.csdn.net/weixin_48407105/article/details/113801842