集合
存放不定数量的不定类型的内容可变的容器,且可以根据需要自由提取元素
集合与数组的区别
- 长度:集合可变,数组固定
- 内容类型:集合只能为引用类型,数组都可以
- 元素内容:数组只能存同种类型,而集合都可以
集合操作
创建、添加元素、删除元素、修改元素、查看元素、数量统计、排序
四个常用集合
- ArrayList
[ArrayList:]线程不安全
[Vector:]线程安全
Array:它是数组,申明数组的时候就要初始化并确定长度,长度不可变,而且它
只能存储同一类型的数据,比如申明为String类型的数组,那么它只能存储S听类型数据
ArrayList:它是一个集合,需要先申明,然后再添加数据,长度是根据内容的多少而改变的,
ArrayList可以存放不同类型的数据,在存储基本类型数据的时候要使用基本数据类型的包装类
2.LinkedList
[LinkedList:]线程不安全
LinkedBlockingDeque:双向队列:线程安全
LinkedBlockingQueue:单向队列:线程安全
[Set:]唯一,无序
HashSet
TreeSet
3.HashMap
[HashMap]线程不安全
Hashtable线程安全:单锁
[ConcurrentHashMap]线程安全:分段锁
解决过度集中
扩展因子: >=0.75=>arr.length*2:再哈希
4.TreeMap
集合内的数据结构
Array:数组
优势:遍历 劣势:查找,插入,删除,
Linked:链表
优势:插入,删除 劣势:遍历,查找
Hash:哈希表(散列表)
优势:
jdk<=7 数组+链表
jdk=8 数组+链表+红黑树
null(==0)>元素(==1)>链表(>=2)>红黑树(>=8)
红黑树>链表(<=6)>元素(==1)>null(==0)
Tree:红黑平衡二叉树
优势:查找 劣势:遍历,插入,删除
List集合的标准行为
int size();
boolean isEmpty();
int indexOf(T t);
int lastIndexOf(T t);
boolean add(T t);
boolean add(int index,T t);
boolean add(T[] ts);
boolean add(int index,T[] ts);
boolean remove (T t);
T remove (int index);
boolean remove(T[] ts);
void retain (T[] ts);
boolean set(int index,T t);
T get(int index);
boolean contains(T t);
boolean contains(T[] ts);
Iterator<T> iterator();
Map的基本操作
Map<K,V> map=new HashMap(int initCapacity);
int size =map.size();
boolean empty=map.isEmpty();
boolean has=map.containsKey(K key);
boolean has=map.containsValue(V value);
V value=map.get(K key);
V value=map.put(K key,V value);
//for(K k:keys){...}
//keys.forEach(e->{});
//Iterator<K> it=keys.iterator();while(it.hasNext()){k key=it.next();...}
Set<> keys=next.keySet();
Collection<V> value=next.value();
Set<Map.Entry<String,Count>> entries=next.entrySet();