標籤:collection java object
1.Map 介面
實現Map介面的集合類是通過"鍵-值"映射的方式來儲存物件的。
"鍵-值"映射對是通過鍵來唯一標識,Map底層的"鍵"是用Set存放的(這就保證了它的唯一性,不重複)。
將鍵映射到值的對象。一個映射不能包含重複的鍵,每個鍵最多隻能映射到一個值。
JDK API中Map介面的實作類別常用的有:1,HashMap 2, TreeMap 3,HashTable(不常用)
注意:鍵和值都可以為null,但是鍵不能夠重複,值可以重複
2.Map介面中常用的方法
Object put (Object key, Object value) ; //將指定的“鍵—值”對存入Map中
注意:由於key的唯一性,如果再放入相同的key的索引值對,則該索引值對會覆蓋原來的
Object get (Object key); //通過key(鍵)取出所映射的值
Object remove(Object key); //根據指定的"鍵"將其“鍵-值”對從map中刪除。
boolean containsKey(Object key); //判斷Map是否包含指定鍵的“鍵-值”對
boolean containsValue(Object value) ;//判斷Map是否包含指定值的“鍵-值”對
boolean isEmpty(); //判斷Map是否包含元素
int size(); //擷取長度
void clear(); //清空Map中的所有“鍵-值”對
Set keySet() ;//返回Map中所包含鍵的set集
Collection values(); //返回Map中所有的values的集合。
3.HashMap
HashMap內部對“鍵”用Set進行散列存放(HashSet),所以根據“鍵”去取"值"的效率很高
4.TreeMap
TreeMap內部對"鍵"用TreeSet的紅/黑樹狀結構結構進行排序存放,所以放入TreeMap的"key-value"對的key
必須是可"排序"的。
5.Map.Entry 介面
Map.Entry是Map內部定義的一個介面,專門用來存放key-value的內容。
6.Collections工具類(與Collection<E>不同)
java.util.Collections 類是操作集合的工具類,提供一些靜態方法實現基於集合的一些常用演算法。
void sort (List list) ;//List列表的所有元素必須都實現comparable介面,根據元素的自然順序按升序排列
void shuffle (List list) ;//對List列表裡的元素()隨機排列。
void reverse(List list) ;//對List列表裡的元素反轉。
void copy(List dest ,List src);//src複製到dest中
void swap(List<?> list,int i,int j) ;//交換列表指定位置的元素
int binarySearch(List <? extends T> list,T key); //尋找列表中某元素的位置,前提是已排序
元素 max(Collection<? extends ?> coll) ;//根據元素的自然順序,返回給定collection中的最大元素
List synchronizedList(List List) ;//返回指定列表支援的同步列表
注意:Collections:對集合進行操作的工具類,裡面都是靜態方法.
Arrays:對數組進行操作的工具類,裡面都是靜態方法.
7.HashTable
舊版的HashTable ,操作大多跟HashMap相同。但是它保證線程的同步。
它有一個子類Properties(屬性集)比較常用:
Properties 類表示了一個持久的屬性集。Properties 可儲存在流中或從流中載入。屬性集中每個鍵及其對應值都是一個字串。
不建議使用put 和putAll 這類存放元素方法,應該使用setProperty(Stringkey, Stringvalue)方法,
因為存放的“鍵-值”對都是字串。類似取值也應該使用getProperty(Stringkey)
不支援泛型操作
//Properties樣本,根目錄下要存在config.properties檔案import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class PropertiesTest {public static void main(String[] args) {//方法鏈InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties");Properties prop = new Properties();try {prop.load(is);} catch (IOException e) {e.printStackTrace();}String name = prop.getProperty("name");String pwd = prop.getProperty("pwd");System.out.println(name + ", " + pwd);}}
8.Map介面輸出
1,Set<k> keySet:將map中所有的鍵存入到Set集合。因為set具備迭代器。
所有可以迭代方式取出所有的鍵,在根據get方法。擷取每一個鍵對應的值。
Map集合的取出原理:將map集合轉成set集合。在通過迭代器取出。
2,Set<Map.Entry<k,v>> entrySet:將map集合中的映射關係存入到了set集合中,
而這個關係的資料類型就是:Map.Entry
Entry其實就是Map中的一個static內部介面。
為什麼要定義在內部呢?
因為只有有了Map集合,有了索引值對,才會有索引值的映射關係。
關係屬於Map集合中的一個內部事物。
而且該事物在直接存取Map集合中的元素。
對於Map介面來說,其本身是不能直接使用迭代進行輸出的,因為Map中的每一個位置存放的是一對值(keyvalue),
而Iterator中每次只能找到一個值。所以如果非要使用迭代進行輸出的話,要按照以下操作步驟完成:
將Map的執行個體通過entrySet()方法變為Set介面對象
通過Set介面執行個體為Iterator執行個體化
通過Iterator迭代輸出,每個內容都是Map.Entry的對象
通過Map.Entry進行keyvalue的分離。getKey,getValue
Map<Integer,String> map = new HashMap<Integer,String>(); //添加元素 map.put(1, "bbb"); map.put(2, "aaa"); map.put(2, "eee");//如果鍵相同,則後面的元素會覆蓋前面的元素. //鍵和值都可以為null,但是鍵不能夠重複.值可以重複. //遍曆Map //1:先獲得Map的key集合,再根據鍵獲得值 Set<Integer> set = map.keySet(); //用增強for迴圈 for(Integer i:set){ System.out.println(i+":"+map.get(i)); } //用Iterator進行遍曆 //2:擷取Map的value集合.但是這個不能擷取鍵. //3:用索引值關係擷取Map ,索引值關係儲存在set集合裡. //Map.Entry是描述Map集合的映射關係. Set<Map.Entry<Integer, String>> set2 = map.entrySet(); for(Map.Entry<Integer, String> m:set2){ System.out.println("key:"+m.getKey()+"--value:"+m.getValue()); }
Map大多時候用於尋找,輸出屬於少數操作。
總結:
Map
|--Hashtable:底層是雜湊表資料結構,不可以存入null鍵null值。該集合是線程同步的。jdk1.0.效率低。
|--HashMap:底層是雜湊表資料結構,允許使用 null 值和 null 鍵,該集合是不同步的。將hashtable替代,jdk1.2.效率高。
|--TreeMap:底層是二叉樹資料結構。線程不同步。可以用於給map集合中的鍵進行排序
選擇標準:
存放要求
無序-Set
有序-List
“key-value”對-Map
讀和改的效率
Hash*-兩者都最高
Array*-讀快改慢
Linked*-讀慢改快
java-集合下《五》