java集合類

集合類示意圖

集合類

從圖中可知 Collection是 List,Set,Quene 的根接口,Map 是另外一個接口 Iterator用於遍歷集合中元素的接口java

下面是各集合的特性數據庫

集合名 是否有序 是否容許元素重複
Liist
HashSet
TreeSet 是(二叉排序樹)
HashMap key惟一,value可重複
TreeMap 是(二叉排序樹) 同上

[集合類特色]安全

集合類方法

遍歷Map方法

  1. 方法一
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {  
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());  
}
  1. 方法二
Map<Integer, Integer> map = new HashMap<Integer, Integer>();  
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();  
while (entries.hasNext()) {  
    Map.Entry<Integer, Integer> entry = entries.next();  
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());  
}

LinkList 方法

  • peek() 或 element() 獲取但不移除此列表的頭
  • poll() 或 remove() 獲取並移除此列表的頭
  • offer(4) 將指定元素添加到此列表的末尾

TreeMap

  • 若是key不實現比較方法
TreeMap<User, Object> tMap = new TreeMap<>(new Comparator<User>() {
			
			@Override
			public int compare(User o1, User o2) {
				// TODO Auto-generated method stub
				return o1.getAge() == o2.getAge() ?0:(o1.getAge()>o2.getAge()?1:-1);
			}
					
});
  • 若是key實現了Comparable接口 TreeMap 能夠不實現Comparator接口,但實現了以它爲先。

OTHER

HashMap 在新版jdk8 中,在數據量大的時候不會採用hash方法哈希key,會採用b-tree,就和如今數據庫採用b-tree的緣由同樣,當數據量過大的時候,hash會形成大多數數據hash值同樣,再作偏移處理,反而影響性能。微信

通常集合的加載因子爲0.75 ArrayList 初始化容量爲10ide

HashMap 初始化容量爲16 即便你初始化的時候指定一個值去初始化容量 其值也不必定是你指定的那個值,其必定是2的冪次方,代碼以下性能

static final int tableSizeFor(int cap) {
        int n = cap - 1;
        n |= n >>> 1;
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
    }

幾組區別

  • HashMap 和 HashTable 、ConcurrentHashMap 區別 - HashTable和ConcurrentHashMap 是線程安全的,如今主要用 後者 - HashTable key值不支持null ,其餘支持爲null - HashTable 是所有都用的synchronized 加鎖,而ConcurrentHashMap使用的分段鎖,並且在讀取value不加鎖,用的是Segment鎖(實際上是一種ReentrantLock鎖)線程

  • LinkedList 和 ArrayList3d

    • ArrayList查詢修改快,LinkedList 增刪快
    • LinkedList 是雙向循環鏈表,也就是具備隊列和棧的特性 LinkedList

歡迎關注個人微信公衆號cobs-snail,讓咱們一塊兒前進吧!!code

前進吧蝸牛

相關文章
相關標籤/搜索