java集合类

集合类示意图

集合类

从图中可知 Collection是 List,Set,Quene 的根接口,Map 是另一个接口 Iterator用于遍历集合中元素的接口

下面是各集合的特性

集合名是否有序是否允许元素重复
Liist
HashSet
TreeSet是(二叉排序树)
HashMapkey唯一,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 初始化容量为10

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 和 ArrayList

    • ArrayList查询修改快,LinkedList 增删快
    • LinkedList 是双向循环链表,也就是具有队列和栈的特性 LinkedList

欢迎关注我的微信公众号cobs-snail,让我们一起前进吧!!

前进吧蜗牛

转载于:https://my.oschina.net/u/2369810/blog/906372

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值