List:
ArrayList(高效)数组 查找快 增删慢 线程不安全
Vector(低效) 数组 查找快 增删慢 线程安全
LinkList 双向链表 查找慢 增删快 线程不安全
1、ArrayList、Vector查找快:
ArrayList、Vector由于底层是数组实现的,所以查找快,因为是连续存放元素的,找到第一个元素的首地址,再加上每个元素的占据的字节大小就能定位到对应的元素。
2、Vector线程安全:
因为Vector的方法前加了synchronized 关键字。Vector是线程安全的,而ArrayList是高效的
3、LinkedList增删效率高:
因为LinkedList插入删除的时候只需要操作引用即可,元素不需要移动,他们分布在内存的不用地方,通过引用来互联起来。而ArrayList需要移动元素,故增删效率低
Map:
1、Map的底层实现:
哈希表(数组+链表的结合)Hash table 既满足了数据的快速查询(根据关键码值key value 而直接进行访问的数据结构),也不会占用太多的内存空间,十分方便。
2、Map集合的遍历:
public static void main(String[] args) {
Map<Integer , String> map = new HashMap<Integer , String>();
map.put(1,"一");
map.put(2,"二");
map.put(3,"三");
map.put(4,"四");
System.out.println(map);
//通过迭代器遍历map集合
System.out.println("通过迭代器遍历map集合");
Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
while (it.hasNext()){
Map.Entry<Integer, String> next = it.next();
System.out.println("Key值="+next.getKey()+"Value值="+next.getValue());
}
//通过map.entrySet遍历key和value(推荐使用,特别是容量大时)
System.out.println("通过map.entrySet遍历key和value(推荐使用,特别是容量大时)");
Set<Map.Entry<Integer, String>> entries = map.entrySet();
for (Map.Entry<Integer, String> entry:entries) {
System.out.println("Key值="+entry.getKey()+"Value值="+entry.getValue());
}
}
3、HashMap和HashTable异同(区别):
1).HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。HashTable是JDK1.0引入的类,是线程安全的,能用于多线程环境中。
2).HashMap对象的key、value值均可为null。HahTable对象的key、value值均不可为null。
3).HashMap、HashTable都是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。
4).HashMap、HashTable都实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。
5).且两者的的key值均不能重复,若添加key相同的键值对,后面的value会自动覆盖前面的value,但不会报错。