Java心得--键值、枚举器
1. 集(Set):和數學上的“集合”概念相對應,是最簡單的一種集合。
Set集合中不區分元素的順序,因此也就不記錄元素的加入順序。
Set集合中不包含重復元素,即任意的兩個元素e1和e2都有e1.equals(e2)=false,并且最多有一個null元素。
2. 實現了Set接口的類HashSet
“基于散列表”的檢測重復元素的策略:HashSet里的元素值同這個元素在Set里所存放的索引位置有個對應關系(散列函數),在HashSet里插入元素前,可根據這個元素值和對應關系,計算出這個元素在HashSet里的插入位置,如果在這個位置里(或位置周圍)已經存在了待插入元素的值,則不能插入。?
μ???構造方法
ü????HashSet()
ü????HashSet(<E> c)
μ???其他方法
ü????boolean contains(Object o) 判斷是否存在指定元素
????????? 剩下繼承父類的方法!該類中沒有get方法。
4.????? 第一類集合有著共同的特性:它們存儲的對象都是一元的(線性的),只不過存儲的方式和使用的數據結構不同,以Collection為基類--封裝了線性表的插入、刪除等基本操作。
第二類集合的共同特性就是它們存放的數據都是二元的,稱其為“鍵-值”對,通過它們可以快速的根據一個關鍵字key來得到其所對應的值value,這里之所以稱其為關鍵字就是因為它必須是唯一的,這樣才能保證每次通過key所得到的value是固定的,即最近一次設置進去的那個值value.
List接口和Set接口都是Collection的子接口??????????????????????????
????? 實現List接口:基于線性鏈表來存放數據的,例如Vector
???? ?實現Set接口:它們不允許有重復的元素,且元素無序(取出的元素跟加入的順序沒關系);例如HashSet。
5. 在Java中,專門建立以Hashtable為代表的“鍵-值”對類型對象,“鍵”--索引信息,而“值” –同索引值相對應的信息。
ˉ???為什么要使用“鍵-值”對型的數據結構
μ???原因:便于信息檢索,提高在大數據量里檢索信息的速度。
μ???工作原理
(1)如果要從其中查詢指定數據的話,不得不依次遍歷這個數組,這樣效率會很低。
(2)換一種思路:將10存入數組不是插入在第一個空閑空間里!
μ???存在“索引沖突” 問題:對于散列函數,不同的“值”會得到相同的“鍵”,即不同的對象可能存放在同一個索引位置上。
μ???解決方法
ü????采用技術上的方法,例如設計出盡量降低沖突情況出現的散列函數,或者是指定沖突發生時的應對策略;
ü????根據待存儲的數據量,適當提高Hash表的容量--用加大空間的代價,來取沖突發生的低概率
新問題:如何根據Hash表里的存儲數據量,開辟Hash表的存儲空間?
è裝載因子:Hash表里實際容納對象的比率,75%最合適
6. “鍵-值”對的典范——Hashtable類
在Java的“鍵-值”對型集合類里,已經封裝了用散列函數優化其中數據搜索效率以及處理Hash表里數據沖突的實現細節。其中Hashtable是 “鍵-值”對型集合類的典范。
μ???構造方法
ü????Hashtable()
ü????Hashtable(int initialCapacity)
ü????Hashtable(int initialCapacity, floatloadFactor)
ü????Hashtable(<K,V> t)
μ???其它方法
ü????V put(K key, V value):向Hashtable對象中插入“鍵-值”對
ü????V get(Object key):根據key這個“鍵”從Hashtable對象中檢索到 對應的“值”
例如,ht.put(new Integer(1),new String(“Tom”));
????????? Stringstr=ht.get(new Integer(1));
ü????boolean containsKey(Object key)
判斷“鍵”是否存在于Hashtable對象中。
ü????boolean containsValue(Object value)
判斷“值” 是否存在于Hashtable中。
例如,boolean flag=ht.containsKey(new Integer(2));
? ?????????flag=ht.containsValue(“Rose”);
ü????public boolean contains(Object?value) 同containsValue()方法。
ü????public void clear()
將此Hashtable清空,使其不包含任何鍵。
7.?? 枚舉器是一個用來訪問集合元素的工具,它不僅提供了可以用來訪問集合的若干方法,更展示了解決訪問對象時“對象類型不確定”難題的思路。
ˉ?????訪問集合類的“不確定性”難題
????? Java中有諸多不同類型的Java集合類(比如Vector或List),程序員希望用同一類型的方式來訪問其中的數據。
ˉ?????枚舉器接口
?????java.util.Iterator(枚舉器接口)封裝“無差別訪問集合對象”的方法。
8. 相關方法
ü????在每一個集合類(比如Vector或Hashtable等)里,都有一個iterator()方法,各集合對象可以通過該方法把遍歷本類的控制權交給Iterator接口。
ü????在Iterator的接口里,提供了boolean hasNext()方法,判斷出是否可以通過枚舉器來得到集合對象中的下一個元素。
ü????在Iterator的接口里,提供了E next()方法,用來獲取集合對象里的下一個元素,它返回的是一個泛型對象。
9.枚舉器“分離”思想
μ???“遍歷不同種類的集合對象” 采用“分離”的設計思想;
μ???把遍歷這個業務動作同將要實施遍歷操作的對象(比如集合)分離,在這個基礎上,抽象出遍歷不同集合對象的共性代碼,并把這些功能代碼封裝到枚舉器這個接口里,就可以用同一套代碼,來遍歷不同類型的集合;
μ???正是由于枚舉器分離了業務動作(枚舉)和業務動作要操作的數據(集合),所以它才能以不變應萬變。
10.倒包時,用具體類或*是一樣的,不影響運行速率。
?
轉載于:https://www.cnblogs.com/yangkai-cn/archive/2012/04/28/4017182.html
總結
以上是生活随笔為你收集整理的Java心得--键值、枚举器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算 字符串的长度
- 下一篇: asp.net的几个错误