课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
容器化是java编程开发程序员需要学习和掌握的一个技术发展变化,而今天我们就通过案例分析来了解一下,java容器化都有哪些常见类型。
Set
--TreeSet(有序):基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作。但是查找效率不如HashSet,HashSet查找的时间复杂度为O(1),TreeSet则为O(logN)。
--HashSet(无序):基于哈希表实现,支持快速查找,但不支持有序性操作。并且失去了元素的插入顺序信息,也就是说使用Iterator遍历HashSet得到的结果是不确定的。
--LinkedHashSet:具有HashSet的查找效率,且内部使用双向链表维护元素的插入顺序。
List
--ArrayList:基于动态数组实现,支持随机访问。(扩容1.5倍)
--Vector:和ArrayList类似,但它是线程安全的。底层用Synchronize实现线程安全。(扩容2倍)
--LinkedList:基于双向链表实现,只能顺序访问,但是可以快速地在链表中间插入和删除元素。不仅如此,LinkedList还可以用作栈、队列和双向队列。
Queue
--LinkedList:可以用它来实现双向队列。
--PriorityQueue:基于堆结构实现,可以用它来实现优先队列。
Map
--TreeMap(有序):基于红黑树实现。
--HashMap(无序):由数组+链表+红黑树实现。
--HashTable:和HashMap类似,但它是线程安全的,这意味着同一时刻多个线程可以同时写入HashTable并且不会导致数据不一致。它是遗留类,不应该去使用它。现在可以使用ConcurrentHashMap来支持线程安全,并且ConcurrentHashMap的效率会更高,因为ConcurrentHashMap引入了分段锁。
--LinkedHashMap:继承自HashMap,底层仍是由数组和链表或红黑树组成。使用双向链表来维护元素的顺序,顺序为插入顺序或者近少使用(LRU)顺序。
List、Set、Map的区别
--List:存储的元素是有序的、可重复的。
--Set:存储的元素是无序的、不可重复的。
--Map:使用键值对(kye-value)存储,Key是无序、不可重复的,value是无序、可重复的,每个键多映射到一个值。
迭代器
Iterator对象称为迭代器(设计模式的一种),迭代器可以对集合进行遍历,但每一个集合内部的数据结构可能是不尽相同的,所以每一个集合存和取很可能是不一样的,虽然我们可以人为地在每一个类中定义hasNext()和next()方法,但这样做会让整个集合体系过于臃肿。于是就有了迭代器。
迭代器是将这样的方法抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做就规定了整个集合体系的遍历方式是hasNext()和next()方法,使用者不用管怎么实现的,会用即可。
迭代器的定义为:提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。
Iterator主要是用来遍历集合用的,它的特点是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出ConcurrentModificationException异常。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。