map set list三种集合之间的关系及各自的特点

来源:互联网 发布:网络扑克 编辑:程序博客网 时间:2024/06/04 19:54

今天给大家带来的是三种常用集合各自的性能分析,这里只是浅谈,就不深入讲解底层了。

在这里先上关系图:



一,Conllection:

接下来先看一下Collection接口:

他有两个子接口,Set和List,

1,Set(公共特点;无序)

是一个无序的集合接口,并且元素不可重复,当然,这里的无序是针对放入顺序而言,并不是绝对的无序,他有两个子类,一个是hashSet,还有一个是继承了SortedSet接口的TreeSet,这两个set集合有什么特点呢?

首先,hashSet的底层是hashmap,他有着hashmap中键的特性,那就是,无序,不可重复性,

其次,treeset实现了sortset接口,sortedset有排序能力,也就意味着treeset也有着排序的能力,他是使用二叉树进行排序的。

2,list(有序):

list接口也有两个子类,一个是arraylist,一个是linkedList,

首先arralist的底层是object[]是一个数组,也就意味着他有着数组的特性,但是和数组相比他比数组灵活,无需设置长度,他是有序的,所以查找块,增删比较慢,

和arralist其实有一个兄弟叫vector,他和arralist是一样的

Vector是线程安全的,也就是说是它的方法之间是线程同步的,而arralist线程是异步的也就是说他是不安全的,但是效率高,相比之下,建议使用arralist.
linkedlist:
他底层是以链表的形式进行排序的,两个元素之间就如同链子一样前关联,如果进行增删操作的时候,只需要将某个元素替换然后将后边的关联简单修改就可以完成,所以说建议查询用arralist,增删用linkedlist;
二,map(公共特点特点:以键值对的形式存储,):
简单来讲常用的map类的集合也有三个,常用的有三个子类实现了mapj接口:map存在的意义就是为了快速查找,通过键的直接找到值,因为键是不可重复的。
1,hashMap和hashtable:
两者放在一起比较(底层都是hash表结构):hashmap线程是不安全的允许键值对为null,二hashtable线程是安全的不允许键值对为null,两者的其他属性是一样的,所以两者的使用要看具体的情况而定,
2,treemap(底层是二叉树)
,线程不同步,可用于给Map集合中的键进行排序
,虽然说有些集合是无序的,但是子类个别的也是按照另一种方式进行了排序,只不过不符合我们日常的排序方式。是按照某种规则进行的。
总结:三者的存在关系:
Map中元素,可以将key序列、value序列单独抽取出来。使用keySet()抽取key序列,将map中的所有keys生成一个Set。使用values()抽取value序列,将map中的所有values生成一个Collection。为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复


1 0
原创粉丝点击