泛型
泛型,即 “參數化類型”。一提到參數,最熟悉的就是定義方法時有形參,然後調用此方法時傳遞實參。
參數化類型:就是將類型由原來具體的類型參數化,類似於方法中的變量參數,此時類型也可以定義成參數形式(可以稱之爲類型參數),然後在使用/調用時傳入具體的類型(類型實參)
數據結構和算法簡介
數據結構概念
數據的邏輯結構和存儲結構及運算
邏輯結構
數據元素和元素之間的關係(面向問題,針對具體問題,爲了解決某個問題)
集合
線性(一對一)
樹(一對多)
圖(多對多)
物理結構
數據的邏輯結構在計算機的存儲形式(面向計算機)
順序存儲結構
鏈式存儲結構
索引存儲
散列存儲(Hash)
程序 = 數據結構 + 算法
算法
概念:
算法是解決特定問題求解步驟的描述,在計算機中表現爲指令的有限序列,並且每條指令表示一個或多個操作。
算法特點
輸入輸出
打印輸出或者返回一個或多個值
有窮性
避免死循環,並不是純數學意義的,而是在實際應用中合理的,可以接受的有邊界
確定性
每一步都需要有確定的含義
可行性
算法設計的要求
正確性
可讀性
寫代碼的目的:1,計算機執行。2,方便他人閱讀,方便自己日後維護
健壯性
對輸入數據不合法 情況做合適的處理
最優算法
時間效率高和存儲量低(用最少的錢和時間辦最大的事)
集合介紹
集合是java對數據結構及算法的封裝
概念
現實生活中:很多事物湊在一起
數學中的集合:具有共同屬性的事物的總體
Java中的集合類:
是一種工具類,就像是容器,存儲任意數量的具有共同屬性的對象。
java集合主要分類三種類型:
Set(集)
List(列表)
Map(映射)
集合的作用
在類的內部,對數據進行組織
簡單而快速的搜索大量的條目
有的集合接口,提供了一系列排列有序的元素,並且可以在序列中間快速的插入或者刪除有關元素。
有的集合接口,提供了映射關係,可以通過key 去快速查找唯一對象,而這個關鍵字可以是任意類型。
集合和數組的區別
數組的長度固定,集合長度可變
數組只能通過下標訪問元素,類型固定,而有的集合可以通過任意類型查找所映射的具體對象,集合只能存放引用數據類型,不能存放基本數據類型。
Collection
Collection接口是list,set接口的父接口,定義了可用於操作ListSet的方法增刪改查
List
List是元素有序並且可以重複的集合,被稱爲序列
List可以精確的控制每個元素的插入位置,或刪除某個位置元素
ArrayList. LinkedList是list的兩個實現類
LinkedList與ArrayList對比
相同點:
方法相同,方法運行結果相同(方法體不同)
元素順序操作相同
同一個元素可以加入多次
線程不安全
區別:
ArrayList底層是數組,適於查詢。
LinkedList底層是雙向鏈表,適合刪除與插入,線程不安全。
ArrayList中常用方法
對List的遍歷有三種
For循環
Foreach
Iterator
集合Set
Set父接口爲Collection,很多方法是繼承過來的,所有很多方法與List相同它不允許出現重複元素
不保證集合中元素的順序
允許包含值爲null的元素,但最多隻能有一個null元素
HashSet、TreeSet是Set的兩個實現類, 兩個類的方法相同,但是方法運行後結果有的不同
- HashSet和TreeSet對比
相同點
沒有下標
不可手動排序
元素順序與加入順序無關
同一個元素不可加入多次
遍歷方式相同
不同點
HashSet:元素順序不可測,與數學上元素集合概念相同
TreeSet:元素順序與元素的排序規則有關
HashSet對元素無要求,而TreeSet對元素有要求,即要求元素必須有排序規則。
元素排序規則與List中元素排序規則是相同的
HashSet:底層是算法是Hash算法:所以查詢速度快,但是沒有ArrayList快
TreeSet:底層算法是樹: 查詢慢,插入快些。
- HashSet相關操作
創建
HashSet<String> set = new HashSet<String>();
長度
set.size();
添加
String s = "a";
set.add(s);
刪除
set.remove(s);
清空
set.clear();
- 遍歷Set
foreach
iterator
集合Map
Map提供了一種映射關係,其中的元素是以鍵值對(key-value)的形式存儲的,能夠實現根據key快速查找value。
鍵(key值)不可重複,value值可以
每個鍵最多隻能映射到一個值
Map支持泛型,形式如:Map<K,V>
- HashMap與TreeMap對比
相同點:
方法相同(但方法運行後結果可能不同)
元素是鍵值對
沒有下標
不可手動排序
元素順序與加入順序無關
同一個元素不可加入多次,鍵相同則認爲是同一元素,與值無關
不同點
HashMap:元素順序不可測
TreeMap:元素順序與元素的鍵的排序規則有關
HashMap對元素無要求,而TreeMap對元素的鍵有要求,即要求元素的鍵必須有排序規則
HashMap:底層是算法是Hash算法:所以查詢速度快,但是沒有ArrayList快
TreeMap:底層算法是樹: 查詢慢,插入快些
- HashMap的相關操作
創建
HashMap<String, Book> map = new HashMap<String, Book>();
長度
map.size();
添加
map.put("01", new Book("think in java"));
獲取
Book book = map.get("01");
刪除
map.remove("01");
清空
map.clear();
*Map遍歷有兩種方式foreach
HashMap<Integer, String> hashmap= new HashMap<Integer, String>();
hashmap.put(1, "一");
hashmap.put(2, "二");
hashmap.put(3, "三");
hashmap.put(4, "四");
for(Map.Entry<Integer, String> me: hashmap.entrySet()) {
//me是存放hashmap中取出的內容,並用Map.Entry<Integer, String> 指定其泛型
System.out.println(me.getKey() + "-->" + me.getKey());
}
Iterator
TreeMap<Integer, String> tm = new TreeMap<>();
tm.put(1, "a");
tm.put(4, "b");
tm.put(3, "c");
Iterator itMap = tm.entrySet().iterator();
while(itMap.hasNext()){
Map.Entry en = (Map.Entry) itMap.next();
Integer key = (Integer) en.getKey();
String value = en.getValue().toString();
System.out.println(key +" "+value);
}