Collection接口:
旗下有 list 和 Set
List中包含有:
ArrayList、vectory、LinkedList
Set中包括有:
HashSet、LinkedHashSet、TreeSet
Map接口:
HashMap、TreeMap、HashTable
关于Collection和Map的常用方法整理:
常用的集合的细节:
- ArrayList:初始大小为10,扩容系数每次为1.5,底层为Object数组进行实现,线程不安全
- Vector:初始大小为10,扩容系数为2,底层实现为Object数组,线程安全,同步方式为synchoronized
- HashSet:初始大小为16,扩容系数为2,底层实现为HashMap<E,Object>键值对,线程不安全
- HashMap:初始大小为16,扩容系数为2,底层为键值对实现,线程不安全
- HashTable :初始大小为11,扩容系数为2倍,线程安全,同步方式为synchoronized
关于List,set,map
list:有序集合
常用方法:
add(Object obj)//增
remove(int index) / remove(Object obj)//删
set(int index,Object ele)//改
get(int index)//查
add(int index,Object ele)//插入
size()//获取长度
void add(int index, Object o); //在index 位置插入o 元素
boolean addAll(int index, Collection c); //从index 位置开始将c集合中的所有元素添加进来
Object get(int index);//获取指定index 位置的元素
int indexOf(Object obj);//返回obj 在集合中首次出现的位置
int lastIndexOf(Object obj);//返回obj 在当前集合中末次出现的位置
Object remove(int index);//移除指定index 位置的元素,并返回被删除的元素
Object set(int index, Object ele);//设置指定index 位置的元素为ele,返回的是被改的值
List subList(int fromIndex, int toIndex);//返回从fromIndex 到toIndex位置的左闭右开的子集合而本身这个list不会改变
//关于遍历
1.//Iterator迭代器方式
Iterator iterator = list.iterator();
while(iterator.hasnext()){
sou(iterator.next());
}
2.//增强for循环
for(Object obj : list){
sout(obj);
}
3.//普通的循环
for(int i =0;i<list.size();i++){
sout(list.get(i));
}
set:无序集合
map:无序键值对
常用方法:
Object put(Object key,Object value)//将指定key-value添加到(或修改)当前map对象中
void putAll(Map m)//将m中的所有key-value对存放到当前map中
Object remove(Object key)//移除指定key的key-value对,并返回value
void clear()//清空当前map中的所有数据元素的操作:
Object get(Object key)//获取指定key对应的value
int size()//返回map中key-value对的个数
Set keySet()//返回所有key构成的Set集合 要是遍历的话再去遍历Set
Collection values()//返回所有value构成的Collection集合
Set entrySet()//返回所有key-value对构成的Set集合
boolean containsKey(Object key)//是否包含指定的key
boolean containsValue(Object value)//是否包含指定的value
boolean isEmpty()//判断当前map是否为空
boolean equals(Object obj)//判断当前map和参数对象obj是否相等
关于数据结构的差异:
Array:以数组作为数据结构底层,查询快
Linked:以链表作为数据机构底层,增删快
Hash:以哈希表作为底层,主要依赖hashcode()与equals()
Tree:二叉树作为底层,自然排序法和比较器排序
ArrayList与Vector
这二者都属于有序集合,但vector相比araylist更加安全,与线程之间同步,arraylist不然
ArrayList与LinkedList
al是基于动态数组的一种数据结构,而Ll是基于链表的一种数据结构(拉珠警告
相比与al来说,LL的使用中,添加与删除都更加迅速,但是对于随机访问,aL更占优势
HashSet与TreeSet
hashset的性能更好,采用红黑树算法的treeset的主要用于需要进行排序操作的set,而大多数情况下hashset应该作为受选
HashMap与HashSet
二者都为hash算法进行元素的位置储存,区别在于set不允许有重复的值,而map不允许有重复的key(键)
HashTable与HashMap
HT的安全性更高,但HM的性能更好,RL多个线程1访问同一个map对象的时候应该使用table来确保线程的一个安全性
关于synchronized( )
此方法可以将指定的集合包装成线程同步的集合,解决掉多线程并发访问时集合的线程安全问题
List array = Collections.synchronized(list);