java容器
java容器
java容器知识点: List接口及实现类 Set接口及实现类 Map接口及实现类 Collection接口和Iterator接口 集合工具类Collections
Collection和Collections的区别
Collection是集合接口,提供给集合对象一些通用方法(为各集合提供同一接口)
Collections是集合的工具类,提供静态方法、排序、搜索和线程安全等工具
List、Set、Map的区别
List 继承Collection,集合元素有序可重复,实现类AbstractList(子类有ArrayList、LinkedList、Vector其中Vector线程安全)
Set 继承Collection,集合元素无序不重复,实现类AbstractSet(子类有HashSet、LinkedHashSet、TreeSet)
Map 集合元素键不能重复,实现类有TreeMap、HashMap、HashTable,其中HashTable线程安全
HashMap和HashTable区别
继承的父类不一样,但实现的接口一样(HashMap继承AbstractMap类,HashTable继承Dictionary类,都实现Map接口)
HashMap线程不安全,HashTable线程安全
HashMap允许键值为null,而HashTable不允许
遍历方式不同,HashMap用Iterator,HashTable用Enumeration
hash值的计算方式不同,解决hash冲突方式不同,扩容方式不同
HashMap和TreeMap区别
HashMap基于哈希表实现,TreeMap基于红黑树实现
HashMap适用于Map中插入、删除和定位元素
TreeMap适用于有序key集合的遍历
HashMap实现原理
hashMap基于哈希表实现,并允许键值为空值
当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上
HashSet实现原理
HashSet底层是HashMap实现
HashSet的值存放在HashMap的键(key)上,HashMap的值(value)是PRESENT
ArrayList和LinkedList区别
ArrayList底层是数组,支持随机访问,时间复杂度O(1)
LinkedList底层是双向循环链表,不支持随机访问,时间复杂度O(n)
ArrayList和Array区别
ArrayList只能存放对象,Array可以存放对象和基本类型
ArrayList大小是可变的,Array指定大小后不可变
ArrayList有强大的功能(addAll、removeAll和iterator等)
ArrayList和Vector区别
ArrayList不是同步的,线程不安全,但是效率高
Vector是同步的,线程安全
List和数组的转换
List->数组: ArrayList.toArray()方法
数组->List: Arrays.asList()方法
哪些集合类线程安全
vector、stack、hashtable、enumeration
Iterator的特点
next()方法,获得序列的下一个元素
hasNext()方法,判断序列中下一个是否还有元素
remove()方法,将迭代器新返回的元素删除
Iterator和ListIterator区别
Iterator用来遍历Set和List集合,ListIteator只能遍历List集合
Iterator只能前向遍历,ListIterator可以前向遍历和后向遍历
ListIterator实现了Iterator接口,并包含其他的功能