所謂同步與非同步,體如今多線程上,若是一個線程修改了對象,則要同步下。HashSet不是同步的,若是多個線程同時訪問一個Set,只要有一個線程修改Set中的值,就必須進行同步處理,一般經過同步封裝這個Set的對象來完成同步,若是不存在這樣的對象,可使用Collections.synchronizedSet()方法完成。Set s = Collections.synchronizedSet(new HashSet(...));
java
Map集合,就是有一對屬性值的集合,屬性包含key,和value。關鍵字key是惟一不重複的。Map是一個有序的集合,因此查詢起來速度很快。而HashSet就像是把HashMap中value去掉,說白了就是隻有一個key的HashMap集合。Set是數學中定義的集合,因此元素無序, 且不能重複添加。java程序中Set集合用的很少,Map集合中的HashMap集合,List集合用的卻是很多,有時間的話不如多研究研究ArrayList,LinkedList,HashMap三個集合,但願這些對你有用。
JAVA幾種數據類型的簡單差異:安全
list是有序不可重複的,而map是以鍵值對的形式存放的
HashSet不容許重複元素,HashSet查找快,而且存儲是無序的,沒有先後關係,存儲的時候用add就加進去一個元素了,雖然JAVA中是用HashMap實現的HashSet,但HashSet沒有key,經過hashset.add(value)存儲元素,經過hashset.contains(value)判斷某元素是否存在於集合中
HashMap容許重複元素,hashmap根據key值查找元素,存儲也是無序的,一個value只能一個key,HashMap能夠當作是一個key-value的集合,經過map.put(key,value)存儲元素,經過map.get(key)得到元素值。經過map.containsKey(key)判斷是否包含某key是否在map中,經過map.containsValue(value)判斷value是否在map中
ArrayList是List是順序存放,插入刪除速度比HashMap快,查詢速度慢,ArrayList經過array.add(value)將元素加入進去,跟hashset同樣很差指定key值
ArrayList和HashMap是異步的,Vector和HashTable是同步的,因此Vector和HashTable是線程安全的,而 ArrayList和HashMap並非線程安全的。由於同步須要花費機器時間,因此Vector和HashTable的執行效率要低於 ArrayList和HashMap。多線程
遍歷HASHMAP有兩種方法:異步
第一種: Map map = HashMap(); Iterator iter = map.entrySet().iterator(); (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object val = entry.getValue(); } 效率高,之後必定要使用此種方式!
實例:ui
HashMap<String, String> cids = this.getUserClientids(uids);
this
Iterator<Entry<String, String>> entryKeyIt = cids.entrySet().iterator();
spa
HashMap<String, ArrayList<String>> temp = new HashMap<String, ArrayList<String>>();
int i = 0;
while (entryKeyIt.hasNext()) {
i++;
Entry<String, String> e = entryKeyIt.next();
String _k = e.getKey();
線程
String _cid = e.getValue();code
}
對象