Java开发基础技术(二)

1、基本类型

序号 基本类型 bit位数 最小值 最大值 包装器
- void - - - Void
1 boolean - - - Boolean
2 char 16 unicode 0 unicode 216 - 1 Character
3 byte 8 -128 127 Byte
4 short 16 -215 215 - 1 Short
5 int 32 -231 231 - 1 Integer
6 long 64 -263 264 - 1 Long
7 float 32 - - Float
8 double 64 - - Double

在这里插入图片描述

  • float内存 :1符号位 + 8 指数位 + 23 尾数位
  • double内存:1符号位 + 11 指数位 + 52 尾数位

2、HashMap

HashMap

  • jdk7中,数组 + 链表,节点通过内部类Map.Entry实现,包括4个属性:key,value,hash,next
  • jdk8中,当链表长度超过8后,链表替换为红黑树,以提升查找效率。节点通过Node或TreeNode实现。
  • capacity数组容量(默认16),loadFactor负载因子(默认0.75),当元素超过capacity * loadFactor时,2倍扩容。
  • 容量为2n大小时,hash定位可以直接通过2n-1位运算,比求余法高效。
  • put过程:通过key的hash定位数组,在链表中比较key,旧值替换,新值先判断扩容,再插入链表或红黑树。
  • get过程:通过key的hash定位数组,在链表中查找key,返回结果。
  • 非线程安全,key、value可null

3、 ConcurrentHashMap

3.1 JDK7 ConcurrentHashMap

JDK7 ConcurrentHashMap

  • Segment数组 + HashEntry数组 + HashEntry链表。
  • concurrencyLevel,Segment数组容量,初始化后不可扩容,Segment继承了ReentrantLock进行锁控制,默认值16,理论上同时支持16个线程并发。
  • initialCapacity,初始容量,平均分配到各个Segment中。
  • Segment内部类似于HashMap实现,内部HashEntry数组+链表实现,可扩容。
  • 线程安全,key、value不可null。解释:由于get返回null时,无法判断key不存在,还是value为空,需要再次执行contains检查,在两次调用过程中数据可能变化,所以不支持。

3.2 JDK8 ConcurrentHashMap

JDK8 ConcurrentHashMap

  • JDK8 ConcurrentHashMap在结构上和HashMap一样,只是多了线程安全的特性。
  • 相比JDK7版本,取消了Segment,直接在table数组元素上加锁
  • 相比JDK7版本,增加了红黑树

4、HashTable

  • 和HashMap一样,数组 + 链表 实现。
  • 使用synchronize实现线程安全,key,value非null
  • 默认容量为11,扩展时尽量使用素数和奇数保证hash平均。通过hash求余法定位。
  • HashTable已经被淘汰了,不需要使用。

5、TreeMap

  • 红黑树实现
  • Entry的6属性:key,value,left、right、parent、color。
  • 非同步的,可null的前提条件是:实现comparator接口,且对Null进行处理。

6、LinkedList

  • 链表实现,读慢,写快。
  • 可null,非线程安全,通过Collections.synchronizedList(new LinkedList())使线程安全。

7、ArrayList

  • 数组实现,都快,写慢。
  • 可null,非线程安全
  • 当大量插入元素时,提前使用ensureCapacity方法扩展容量,可以提升效率。

8、Vector

  • 线程安全版的ArrayList,通过synchronize实现。
  • 当创建iterator并使用过程中,vector发生改变,将抛出异常,必须处理。

9、Stack

  • 继承Vecotr,实现后进先出(FILO)的容器。
  • 5个方法:pop,push,peek(得到栈顶元素),empty(检测是否空),search(查找位置)。

10、HashSet

  • 底层通过HashMap<E, Object>。
  • 值不重复,且无序。
  • 最多一个null元素。

11、TreeSet

  • 底层通过TreeMap<E, Object>。
  • 值不重复,插入时按一定的顺序。

12、WeekHashMap

  • key为弱引用,必须在Map之外有强引用,否则会被GC。

猜你喜欢

转载自blog.csdn.net/weixin_43102143/article/details/82825099