java中Map、List与Set比较
来源:互联网 发布:linux nvidia驱动卸载 编辑:程序博客网 时间:2024/05/17 06:42
java中集合包括三大类,它们分别是Map、List和Map。我们为什么要设定不同的集合类型,是为了放置不同的数据,而且不同类型用在不同的场合。这三个类放在何处呢,它们放在java.util包中,Set、List和Map都是接口,它们有各自的实现类。Set的主要实现类:HashSet和TreeSet,List的主要实现类是ArrayList,而Map主要实现类是HashMap和TreeMap。
Set集合:
继承于Collection接口。类似一个罐子,把一个对象添加到set集合时,Set集合无法确定添加的顺序,故Set集合中要求不能添加重复的数据(否则系统将无法准确找到该元素)。
HashSet:是Set集合接口的典型的实现,我们通常都会使用这个实现类,HashSet接口按照Hash算法来进行查找和存取,具有很好的效率,它具有以下特点:
特点:
1、不能保证元素按顺序排列
2、HashSet不是同步的,如果多个线程访问同一个HashSet,如果多个线程同时修改HashSet的
值,必须程序员去保证同步。
3、集合元素值可以是null
TreeSet:实现SortedSet,顾名思义TreeSet可以保证元素处于排序状态,采用红黑树算法来存储集合元素。(红黑树算法是一种二叉查找树) TreeSet除了具有HashSet具有的方法外,还提供了排序的方法--Comparator()来实现对集合中元素进行排序。TreeSet默认支持两种排序方法:自然排序和定制排序。自然排序会调用集合中比较方法--compareTo(Object obj)方法比较元素之间的大小关系,然后将集合按照升序排列。而定制排序其实就是可以实现自己私人定制,我们可以根据自己的需要来进行降序排列。
上面是两个主要应用的Set集合的实现类,HashSet还有一个子类:LinkedHashSet,它也是根据元素的HashCode来查找元素的存储位置,但它使用链表来维护元素的次序,由于链表的链接作用,这样当我们从集合中查找数据时,看起来是按照插入的顺序来保存的,也就是说我们需要遍历整个集合时,会按照添加的顺序来访问集合中元素。
Set实现类的比较
1、HashSet性能高于TreeSet(特别在添加、查找元素操作时),因为TreeSet需要额外的算法来维护次序
2、对于普通的插入、删除HashSet高于LinkedHashSet,这是由于维护链表需要额外的开销,但正是因为有了链表,使得LinkedHashSet遍历速度要快于HashSet
3、HashSet、TreeSet和LinkedSet都是线程不安全的
- java中Map、List与Set比较
- 浅析java中Map,List与Set
- java中Map,List与Set详解
- c++中list, vector, map, set 区别与用法比较
- JAVA基础-Collection中List,Set,Map的比较总结
- Java中array、Set、List和Map的比较总结
- Java中 List、Set、Map
- Java中 Map、Set、List
- java中Set、List、Map
- java中Map,set,list
- Java List Map Set 常用结构比较
- java中Map,List与Set的区别与联系
- list set map比较
- Map list set 比较
- JAVA中List、Map、Set的区别与选用
- JAVA中List、Map、Set的区别与选用
- JAVA中List、Map、Set的区别与选用
- java中Map,List与Set的区别
- keepalived + nginx组建高可用负载平衡Web server集群
- 3.9 数据链路层 本章小结
- Handle ,HMODULE ,HINSTANCE,HINSTANCE
- Sublime--快捷键
- 如何给变量取个简短且无歧义的名字
- java中Map、List与Set比较
- iOS学习笔记之UITableView(1)
- javaee之jsp见解
- C++ Union
- Android Framework 记录之一
- HDU 5296 Annoying problem(LCA模板+树的dfs序心得)
- win8.1安装驱动出现“文件的哈希值不在指定的目录”的解决办法
- EventBus 3.0 相见恨晚
- linux 下platform设备和驱动注册的先后顺序