java基礎第九天——泛型

ArrayList:
底層數據結構是數組,查詢快,增刪慢
線程不安全,效率高

Vector:
底層數據結構是數組,查詢快,增刪慢
線程安全, 效率低

特有方法:
public void addElement(E obj) --> add()
public E elementAt(int index) --> get(int index)
public Enumeration<E> elements() ---> iterator()
boolean hasMoreElements() ---> hasNext()
E nextElement()  ---> next()

LinkedList:
底層數據結構是鏈表,查詢慢,增刪快
線程不安全,效率高

特有方法:
void addFirst(E e)   將指定元素插入此列表的開頭。 
  void addLast(E e)  將指定元素添加到此列表的結尾。 
E getFirst()  返回此列表的第一個元素
E getLast()  返回此列表的最後一個元素 
E removeFirst()  移除並返回此列表的第一個元素。
E removeLast()  移除並返回此列表的最後一個元素
 
Stack: 棧
方法:
boolean empty()   測試堆棧是否爲空 
E push(E item)  把項壓入堆棧頂部。 
E pop() 移除堆棧頂部的對象,並作爲此函數的值返回該對象 
—————————————————————————————
去除集合中字符串的重複值
方式1: 採用選擇排序算法
方式2: 創建新集合方式
—————————————————————————————
泛型: 用來約束數據的數據類型
泛型的格式:
<數據類型>
泛型可以使用在 類,接口,方法,變量上
 
泛型的好處
A:提高了程序的安全性
B:將運行期遇到的問題轉移到了編譯期
C:省去了類型強轉的麻煩


泛型類, 就是把泛型的聲明 定義在類上
如何聲明一個泛型類 :
格式 : public class 類名 <泛型類型> {}


什麼時候將泛型的類型確定的?
創建對象的時候確定的


泛型方法: 把泛型定義聲明在方法上
如何聲明一個泛型方法:
格式:public <泛型類型> 返回類型 方法名(泛型類型 .)


什麼時候將泛型的類型確定的?
調用方法的時候確定的


泛型接口: 把泛型定義在接口上
如何聲明一個泛型接口:
格式:public  interface 接口名<泛型類型1…>

什麼時候將泛型的類型確定的?
創建接口子類對象的時候確定的


泛型高級(通配符):
泛型通配符<?>
任意類型,如果沒有明確,那麼就是Object以及任意的Java類了
? 理解爲就是 Object類型

<? extends E>
向上限定,E及其子類
? extends Animal
? 代表的就是Animal類本身或者是Animal類的子類

<? super E>
向下限定,E及其父類
? super Animal

? 代表的就是Animal類本身或者是Animal類的父類

—————————————————————————————

無論登入還是註冊 都是與用戶相關的信息


所以,我們要提供一個 用戶類
class User {
String 用戶名;
String 密碼;

public boolean 登錄 (用戶名, 密碼){}
public boolean 註冊 (用戶類對象 ){}  
}
—————————————————————————————
隨着將來功能的增加,把所有的內容 都放在 用戶類中是不合適的

把 用戶類 進行拆解: 拆解成 用戶基本信息類 與 用戶功能操作類

class 用戶基本信息類 {
String 用戶名;
String 密碼;
}

class 用戶功能操作類 {
public boolean 登錄 (用戶名, 密碼){}
public boolean 註冊 (用戶類對象 ){}  


—————————————————————————————

界面
選擇對應的功能
1: 登入
輸入用戶名與密碼信息
調用登入功能
2: 註冊
創建用戶對象
調用註冊功能
3: 退出
結束JVM
—————————————————————————————
按功能進行分包操作:


pojo: 具體的實體類
User.java 用戶類
 
ui:  界面
MainApp.java 界面類
 
dao: 具體的功能類的接口
UserDao.java 用戶功能接口文件
登入功能(抽象方法)
註冊功能(抽象方法)

dao.impl: 具體功能類的實現類包
UserDaoImpl.java 用戶功能具體實現類
登入功能(具體方法)
註冊功能(具體方法)
—————————————————————————————

Set:
|- HashSet
|- LinkedHashSet

|- TreeSet


set: 
元素唯一不能重複


HashSet:
元素唯一不能重複
底層結構是 哈希表結構
元素的存與取的順序不能保證一致
如何保證元素的唯一的?
重寫hashCode() 與 equals()方法



LinkedHashSet:
元素唯一不能重複
底層結構是 哈希表結構 + 鏈表結構
元素的存與取的順序一致
如何保證元素的唯一與有序的?
元素唯一: 哈希表結構保證的
元素有序: 鏈表結構保證的


TreeSet:
元素唯一不能重複
底層結構是 二叉樹結構
元素的存與取的順序不能保證一致
但是,在集合內部進行了元素的排序【自然排序,比較器排序】
自然排序接口 Comparable<T> 
實現方法 public abstract int compareTo(T obj);

比較器排序接口 Comparator<T>
實現方法 public abstract int compare(T obj1, T obj2);

TreeSet集合是如何保證元素唯一併有序的?
自然排序接口 Comparable<T>
比較器排序接口 Comparator<T>



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