Java 中List和Map

Java 中List和Map
一、list介绍,map介绍,以及其下面的自实现类的区别

Java中ArrayList、Vector、LinkedList三者的异同点
1、ArrayList
ArrayList是一个泛型类、是一个数组列表、可以存放一切指定类型的对象、object是一切类型的父类、因此ArrayList内部有一个Object类型的数组类存放对象。
ArrayList内部有一个私有类实现Iterator接口、可以使用Iterator()方法得到ArrayList的迭代器。
ArrayList所有的方法都是在默认的单一线程下进行的、不具有线程安全性、若想在多线程下使用、应该使用colletions类中的静态方法synchronizedList对ArrayList进行调用。
2、LinkedList
LinkedList是一个双向链表、因为它实现Deque接口和List接口、也是线程不安全的、若想在多线程下使用、应该使用colletions类中的静态方法synchronizedList对LinkedList进行调用。
LinkedList内部实现中、使用结点来存放数据的、有一个指向链表头的节点first和一个指向链表尾的节点last、不同于ArrayList只能在数组末尾插入数据、LinkedList可以很方便的在链表头或者链表尾插入数据、或者在指定的节点前后插入数据、add()默认的在链表尾插入数据、LinkedList查询效率要低一些、因为他是一个双向链表。
3、Vector
Vector与ArrayList的唯一区别是Vector是线程安全的、因为Vector大部分方法的内部都包含关键字synchronized 。
Java中hashMap、HashTable、LinkedHashMap、TreeMap、ConcurrentHashMap、WeakReferenceHashMap的异同点
1、hashMap
hashMap实现的算法是哈希表、实现的数据结构是链表与数组、初始化参数有初始容量和装载因子、hashMap中的每条记录(entry)有键(key)与值(value)两个属性、其中键作为记录(entry)的唯一标识、不可重复、hashMap内部构建了两个Set、KeySet与EntrySet、可以通过foreach循环进行访问、也可以使用iterator迭代器进行访问、KeySet会遍历两次、第一次先转为iterator、第二次再取出value,而entrySet只遍历一次、所以一般选用EntrySet进行遍历。
2、HashTable
HashTable线程安全、相比于HashMap(非线程安全)、HashMap的效率要高、可以插入null的键值、而HashTable不能插入null的键值、
3、LinkedHashMap
LinkedHashMap是HashMap的子类、继承自HasMap、与HasMap不同的是除了使用哈希表来保存元素、还构建一个双向循环链表来记录元素的顺序、LinkedHashMap中、记录元素顺序有两种选、一是插入顺序(默认)、二是访问顺序、即每次被访问的元素都会被插入到双向链表的尾部。
4、TreeMap
TreeMap和HashMap并列、都继承AbstractMap、它的实现算法是红黑树、在遍历时按照预先设定的排序算法有序的访问元素、TreeMap的键不可以为空
5、ConcurrentHashMap
ConcurrentHashMap是java.util.concurrent包里面的数据结构、键值不可以为null、保证了线程安全。
6、WeakReferenceHashMap
WeakReferenceHashMap是弱引用HashMap、如果WeakReferenceHashMap里的对象仅有WeakReferenceHashMap引用的话、那么在下一次的垃圾回收时、它就会被gc线程回收掉、使用WeakReferenceHashMap主要是防止OOM。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值