Java集合类

两大类

Iterator

该接口用于遍历集合中的元素

  • hasNext
  • next
  • remove
    使用迭代器删除集合元素时不会出现并发修改异常
	public void remove() {
	      if (lastRet < 0)
	          throw new IllegalStateException();
	      checkForComodification();
	
	      try {
	      	//modCount++
	          ArrayList.this.remove(lastRet);
	          cursor = lastRet;
	          lastRet = -1;
	        //重置,保持统一 
	          expectedModCount = modCount;
	      } catch (IndexOutOfBoundsException ex) {
	          throw new ConcurrentModificationException();
	      }
	  }
	     
	  final void checkForComodification() {
	  	//不一样会抛出异常
	      if (modCount != expectedModCount)
	          throw new ConcurrentModificationException();
	  }

Collection

Set:不允许重复

-HashSetTreeSetLinkedHashSet
底层实现HashMap红黑树LinkedHashMap
重复性不允许重复不允许重复不允许重复
有无序无序有序,支持两种排序方式,自然排序和定制排序,其中自然排序为默认的排序方式。有序,以元素插入的顺序来维护集合的链接表
时间复杂度add(),remove(),contains()方法的时间复杂度是O(1)add(),remove(),contains()方法的时间复杂度是O(logn)LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet,时间复杂度是 O(1)。
同步性不同步,线程不安全不同步,线程不安全不同步,线程不安全
null值允许null值不支持null值,会抛出 java.lang.NullPointerException 异常。因为TreeSet应用 compareTo() 方法于各个元素来比较他们,当比较null值时会抛出 NullPointerException异常。允许null值
比较equals()compareTo()equals()

list

-ArrayListVectorLinkedList
底层实现数组数组链表
安全等非线程安全,效率高,支持随机访问线程安全(synchronized),效率低非线程安全,效率高
特点查询快,增删慢查询快,增删慢查询慢,增删快
默认容量1010/
扩容机制1.5倍2倍/
三种遍历时操作
  1. for循环(删除失败,因为remove会使后面的元素向前移动)
  2. 增强for循环(抛出异常)
  3. Iterator(成功)

Queue

Map

HashMap在JDK1.7和JDK1.8中有哪些不同

不同JDK 1.7JDK 1.8
存储结构数组 + 链表数组 + 链表 + 红黑树
初始化方式单独函数:inflateTable()直接集成到了扩容函数resize()中
hash值计算方式扰动处理 = 9次扰动 = 4次位运算 + 5次异或运算扰动处理 = 2次扰动 = 1次位运算 + 1次异或运算
存放数据的规则无冲突时,存放数组;冲突时,存放链表无冲突时,存放数组;冲突 & 链表长度 < 8:存放单链表;冲突 & 链表长度 > 8:树化并存放红黑树
插入数据方式头插法(先讲原位置的数据移到后1位,再插入数据到该位置)尾插法(直接插入到链表尾部/红黑树)
扩容后存储位置的计算方式全部按照原来方法进行计算(即hashCode ->> 扰动函数 ->> (h&length-1))按照扩容后的规律计算(即扩容后的位置=原位置 or 原位置 + 旧容量)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值