Java 常见集合归类整理(一)

1、顶层接口下级

**Collection 接口 下 主要分为单列集合 **
List (java.util)
Set (java.util)
Queue (java.util)

双列集合的顶层
Map<K, V>接口(java.util)

2、次级接口分类介绍。

1.1 List.
List接口:元素按进入先后有序保存,可重复
        ArrayList (java.util)	接口实现类, 数组, 随机访问, 没有同步, 线程不安全。
        LinkedList (java.util)  接口实现类, 链表, 插入删除, 没有同步, 线程不安全
        Vector (java.util)		接口实现类 数组, 同步, 线程安全。
		    |——————Stack(java.util)	 是Vector类的实现类, 栈结构。先进先出。
		CopyOnWriteArrayList    线程同步,数组结构,写时同步拷贝一个副本操作,读写分离,不适合实时操作,不适合大容量。
1.2 Set
Set 接口:元素不可重复,默认无序。可内部排序。
	    HashSet (java.util)			内部使用HashMap实现,通过Key不可重复的特制完成。部分构造方法可以实例化LinkedHashMap.
        LinkedHashSet (java.util)	继承至HashSet。
        TreeSet(java.util)		内部通过TreeMap实现,
1.3.Map
Map 接口:Key value形式的集合。
		Hashtable	 接口实现类, 同步, 线程安全。内部数组+链表形式完成。put/get方法外用synchronized修饰。
					 性能大致等价于Collections.synchronizedNavigableMap(Map map)
		HashMap 	 接口实现类 ,没有同步, 线程不安全。内部数组+链表。1.7通过链表来完成hash冲突。
			 | 		1.8则当链表长度超过一定阈值时,采用红黑树的形式 加快查找命中。
			 |
			 |_____	LinkedHashMap 双向链表和哈希表实现。构参不同内部可以支持 按插入顺序 或者按照访问顺序排序。
			 |
			 |———	WeakHashMap	数组+链表。but特点是 key同时存在ReferenceQueue中,每次变动会对其做一次同步。判断key是否被回收。
		
		IdentityHashMap  接口实现类,不同步、线程不安全。大致等价于hashMap。跟hashMap区别的地方在于IdentityHashMap  的key判别是对象的内存地址“==”来判别。 hashMap则是值判别“equals”。
		TreeMap 		 有序链表,二叉搜索树。非线程安全。
		ConcurrentHashMap	线程安全。内部数组+链表。通过 volatile 以及局部锁,来保证线程安全。

3、扩容机制

ArrayList Vector 底层数组。默认容量10.

ArrayList: 线程不安全,查询速度快
   			底层数据结构是数组结构
   			扩容增量:原容量的 0.5倍+1(int newCapacity = oldCapacity + (oldCapacity >> 1);)
   			之后用过Arrays.copyOf()拷贝数据到新数组。
Vector:线程安全,但速度慢
		底层数据结构是数组结构
		加载因子为1:即当 元素个数 超过 容量长度 时,进行扩容
		扩容增量:原容量的 1倍
		如 Vector的容量为10,一次扩容后是容量为20

HashMap HashSet默认初始容量为16

Map是一个双列集合。Set一般基于Map实现。
HashMap:默认初始容量为16(为何是16:16是2^4,可以提高查询效率,另外,32=16<<1)
加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍 时,进行扩容
扩容增量:原容量的 1 倍
如 HashSet的容量为16,一次扩容后是容量为32。 初始容量 设置100的话。实际容量会是 128.必须为2的倍数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值