List集合和Map集合的学习总结

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,但不会报错。

发布了17 篇原创文章 · 获赞 13 · 访问量 1152

猜你喜欢

转载自blog.csdn.net/Tianc666/article/details/104356248