java面向對象高級泛型與list,set,Map

泛型

泛型,即 “參數化類型”。一提到參數,最熟悉的就是定義方法時有形參,然後調用此方法時傳遞實參。

參數化類型:就是將類型由原來具體的類型參數化,類似於方法中的變量參數,此時類型也可以定義成參數形式(可以稱之爲類型參數),然後在使用/調用時傳入具體的類型(類型實參)


數據結構和算法簡介

數據結構概念

數據的邏輯結構和存儲結構及運算

邏輯結構

數據元素和元素之間的關係(面向問題,針對具體問題,爲了解決某個問題)

集合

線性(一對一)

樹(一對多)

圖(多對多)


物理結構

數據的邏輯結構在計算機的存儲形式(面向計算機)

順序存儲結構        

鏈式存儲結構       

索引存儲            

散列存儲(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);

    }


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