从网上粘贴的结构图
Collection
├List
│├LinkedList
│├ArrayList
│└Vector(了解,已过时)
│ └Stack
└Set
Map
├Hashtable(了解,已过时)
├HashMap
├ConcurrentHashMap
└WeakHashMap
collection接口是集合的根接口,list和set都继承collection;
list是有序的,允许存放重复的元素
HashSet是无序的,不允许存放重复元素
TreeSet是有序的(二叉树排序),不允许存放重复元素
HashMap是无序的,key不允许重复,value可以重复
TreeMap是有序的(二叉树排序),key不允许重复,value可以重复
ArrayList:
ArrayList底层是数组,ArrayList并不是线程安全的
1.ArrayList默认有三个构造函数:
第一个是空参构造函数,默认初始化长度是10;
第二个是带参构造,入参size是多少,就初始化多少;
第三个是collection类型的参数,如果入参size>0,那就调用Arrays.copyOf,否则的话,就赋值为空数组
2.ArrayList.contains()方法
底层是使用indexOf()方法,将当前list转换为数组,遍历数组,在第几位匹配到,就返回当前下标,在遍历之前,会区分是NULL还是正常的字符
LinkedList:
底层是双向链表,Node节点,每个节点都有前面节点的指针和后面节点的指针
HashSet:
HashSet的底层使用的是HashMap;HashSet添加的值都保存在hashMap的key上,value是定义的一个static变量 private static final Object PRESENT = new Object() HashSet的构造函数有两个,无参和带参
HashSet.add()方法调用的是hashMap.put()
HashMap的初始化容量是16,负载因子是0.75
.
ConcurrentHashMap:
concurrentHashMap采用了segment分段锁的机制,每个segment就相当于一个hashTabe,HashTable是把锁所有数据,concurrentHashMap是锁一部分数据,这样多线程访问的时候,就不会出现阻塞,concurrentHasMap最大并发访问量是16
iterator: 所有的集合类,都实现了Iterator接口,主要用于遍历集合中的元素,有以下三个方法:
>. hasNext():是否还有下一个元素
>. next():返回下一个元素
>. remove(): 删除当前元素
第一次发博客,还请各位大佬多多指点