集合

Collection:(存放单一值的集合)

常用方法

add

增加指定元素,要求传入的参数是Object对象,因此当写入基本类型数据时,包含了自动插装箱的过程。

addAll

添加另一个集合的元素到此集合中

clear

清空集合中的元素,但是此集合对象并没有回收

remove

删除指定元素

removeAll

删除传入集合与此集合交集的元素

contains

判断集合中是否包含指定的元素

containsAll

判断集合中是否包含另一集合

isEmpty

判断集合是否等于空

retainAll

只保留在此集合中存在的元素

size

返回当前集合的大小

toArray

将集合转换成数组

List

底层数据结构

ArrayList:动态数组(查找快,增删慢)
LinkedList:双向链表(增删快,查找慢)
Vector:动态数组(查找快,增删慢)

扩容机制

ArrayList默认初始大小为10,扩容为原始数组的1.5倍,原理是把原始数组的元素存储到扩容后的数组。
Vector默认的初始大小为10,扩容为原始数组的2倍,原理是把原始数组的元素存储到扩容后的数组。
LinkedList初始化时不指定大小,默认为0,不存在扩容机制,新增多少加多少。

线程安全

ArrayList和LinkedList在单线程环境下是安全的,在多线程环境下是不安全的,容易造成脏读的问题。
Vector是线程安全的,大部分方法都有synchronized关键字。

Set

底层数据结构

HashSet:哈希表,一个元素为链表的数组,构造方法中实际上是HashMap,元素可以为null。
TreeSet:红黑树,有序,构造方法中实际上是一个TreeMap。

内部存储机制

HashSet:通过元素的hashCode和equals方法来确保集合内部元素的唯一性,通过hashCode值决定在数组的位置,hashCode值相同,equals为false的则放在数组同一位置的链表上。
TreeSet:

Map

HashMap

底层数据结构

hashmap使用了数组+链表+红黑树的数据结构,相比与JDK1.7来说入了红黑树,当链表上的元素超过8个时,会转换为红黑树结构,大大提高了查询效率。

存储元素
扩容

你可能感兴趣的:(java)