从图中可知 Collection是 List,Set,Quene 的根接口,Map 是另外一个接口 Iterator用于遍历集合中元素的接口java
下面是各集合的特性数据库
集合名 | 是否有序 | 是否容许元素重复 |
---|---|---|
Liist | 否 | 是 |
HashSet | 否 | 否 |
TreeSet | 是(二叉排序树) | 否 |
HashMap | 否 | key惟一,value可重复 |
TreeMap | 是(二叉排序树) | 同上 |
[集合类特色]安全
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()); }
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()); }
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); } });
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
欢迎关注个人微信公众号cobs-snail,让咱们一块儿前进吧!!code