您好,欢迎访问一九零五行业门户网

java集合框架学习笔记

java集合类可以用于存储数量不等的多个对象,并且可以实现常用的数据结构比如栈,队列等。与数组不同,数组长度是不可变的,数组元素可以存放基本类型和对象类型而集合里只能保存对象(实质上是对象的引用变量),java集合大致可以分为set、list、和map ,其中set代表无序,不可重复的集合,list代表有序,可重复的集合,map代表具有映射关系的集合,map中key唯一,value可重复。其中set ,list 以及java5之后新增的 queue队列是collection下派生的子接口
set集合不允许包含相同的元素,集合中对象之间没有明显的顺序hashset,linkedhashset,treeset,是set的主要实现类其中 hashset 不能保证元素的排列顺序,hashset不是同步的,hashset集合元素允许为null,当一个对象存入hashset中时,hashset会调用对象的hashcode方法到的对象的hashcode值,根据该hashcode值决定对象在hashset中的存储位置。hashset 中判断两个对象是否相等是通过比较equals()和hashcode()方法返回值都相等来判断的
linkedhashset 是hashset的一个子类,但它同时使用链表来维护元素的次序,这样使得元素看起来是以插入的顺序保存的,因为其需要维护元素的插入次序,所以性能略低于hashset的性能,由于其依然是hashset所以同样元素不能重复
treesettreeset是sortedset接口的实现类,同样treeset可以去保证集合元素处于排序状态,treeset会调用集合元素的comparto(object obj)方法比较元素之间的大小关系,然后将集合元素升序排列,即自然排序。treeset也可以通过comparator接口实现定制排序,在创建treeset集合对象时,提供一个comparator对象与该treeset集合关联,由该comparator对象负责集合元素的排序逻辑。
各种set性能比较hashset的性能总比treeset要好,因为treeset需要额外的算法来维护集合元素的次序,只有当需要保持排序的set 时才应该使用treeset 否则都应使用hashset 。另外linkedhashset是hashset的子类,对应普通的插入,删除操作,linkedhashset 比hashset 的性能要稍微慢点,是因为维护链表所带来的的开销造成的,不过因为有了链表,遍历linkedhashset时会更快一点。但是set的三个实现类都不是线程安全的,通常可以使用collections工具类的synchronizedsortedset方法来包装该set集合,此操作最好在创建时进行
例如:sortedset  s = collections.synchronizedsortedset(new treeset(...));
list 集合代表一个有序的.可以重复的集合,集合中的元素都有其对应的索引arraylist 与 vector是list的两个典型实现,还有一个linkedlist其中arraylist和vector类封装了一个动态的,允许再分配的object[ ] 数组,当添加的元素个数超出该数组长度时,则初始长度会自动增加。arraylist和vector的显著区别是arraylist不是线程安全的,而vector是线程安全的,无需程序保证集合的同步性。因为vector是线程安全的,所以vector色性能要比arraylist要低。即使需要保证线程安全,一般也不推荐使用vector,而是使用collections工具类的相关方法将arraylist包装成一个线程安全的类。
vector还有一个子类叫stack栈,用于模拟栈这种数据结构,后进先出,由于是继承关系,所以stack也是线程安全的,所以性能比较差,不推荐使用,如果需要使用栈这种数据结构,可以考虑使用linkedlist.
linkedlist 也是list 的实现类,它是一个基于链表实现的list,对于顺序访问集合中的元素进行了优化,特别是插入和删除元素是非常快,linkedlist既实现了list接口,又实现了deque接口,由于实现了deque接口可以作为栈来使用。 queue集合用于模拟队列这种数据结构,先进后出 ,deque是queue的一个子接口,代表一个双端队列,允许从两端操作队列的元素。
linkedlist与arraylist区别由于arraylist内部是以数组的形式来保存集合中的元素,因此随机访问集合元素时拥有较好的性能,而linkedlist是以链表的形式来保存集合的元素的,所以随机访问的性能较差,但是在插入、删除元素时性能非常出色。
map用于保存具有映射关系的数据,key和value都可以是任何引用类型的数据,但是map的key值是唯一的不能重复hashmap 和hashtable是map的两个实现类hashtable 是一个线程安全的map实现类,但是hashmap不是线程安全的,所以hashmap的性能要稍好一点。
另外hashtable不允许使用null作为key和value,试图将null放进hashtable会引发空指针异常,但是hashmap可以使用null作为key和value,由于key不能重复,所以hashmap最多只有一个key为null,但是可以有多个value为null。
hashmap和hashtable判断两个key相等额标准是两个key通过equals()和hashcode()方法返回值都相等。
linkedhashmap 是hashmap的一个子类,linkedhashmap也使用双向链表来维护key的次序,即迭代顺序与插入顺序保持一致。因为要维护元素的插入顺序,所有性能较hashmap略低。
treemapmap下还有一个sortedmap接口,sortedmap接口又一个treemap实现类treemap保存key-value对时,需要根据key对节点进行排序,treemap排序分为自然排序和定制排序,自然排序时key必须实现comparable接口,定时排序时,创建treemap时需要传入一个comparator对象,由该对象对treemap中的key进行排序。与treeset类似。treemap 比 hashmap和hashtable效率要慢,因为其要保持排序。
collection与collections的区别collection是java的集合框架的一个接口
collections 是集合框架中的一个工具类,该工具类提供了大量方法对集合元素进行排序,查询,修改等操作,还提供了将集合对象设置为不可变,对象集合实现同步控制的一些方法。
以上就是java集合框架学习笔记的详细内容。
其它类似信息

推荐信息