java的集合类(Map、List与Set比较)

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都是线程不安全的

原文地址:https://www.cnblogs.com/wangcp-2014/p/11497283.html

时间: 2024-07-29 12:10:09

java的集合类(Map、List与Set比较)的相关文章

JavaScript中模拟实现Java的集合类Map的常用方法

JavaScript中模拟实现Java的集合类Map的常用方法 (function Map(){ var size = 0, map = {}, strundefined; function MapCache() { } MapCache.prototype.put = function (key, value){ if ( key === null || key === undefined){ throw new Error(" null or undefined is not a illeg

Java中的Map List Set等集合类

Map List Set等集合类: 一.概述 在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父子关系: +Collection 这个接口extends自 --java.lang.Iterable接口 ├+List(接口 代表有序,可重复的集合.列表) │├ ArreyList     (Class 数组,随机访问,没有同步,线程不安全) │├ Vector        (Class  数组                   同步        线程全) │

Java:集合类的区别详解

Java中集合类的区别 Array是数组,不在集合框架范畴之内,一旦选定了,它的容量大小就不能改变了,所以通常在编程中不选用数组来存放. 集合 : 集合对象:用于管理其他若干对象的对象 数组:长度不可变 List: 有顺序的,元素可以重复 遍历:for .迭代 排序:Comparable Comparator Collections.sort() ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的Lis

Java容器集合类的区别用法

本文转载自GIS虫子... 的blog,原文地址为:http://www.cnblogs.com/sunliming/archive/2011/04/05/2005957.html 本文仅作为笔记备份.特此感谢原作者! JAVA的容器---List,Map,Set Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection接口 Co

首先java中集合类主要有两大分支

本文仅分析部分原理和集合类的特点,不分析源码,旨在对java的集合类有一个整体的认识,理解各个不同类的关联和区别,让大家在不同的环境下学会选择不同的类来处理. Java中的集合类包含的内容很多而且很重要,很多数据的存储和处理(排序,去重,筛选等)都需要通过集合类来完成. 首先java中集合类主要有两大分支: (1)Collection (2)Map 先看它们的类图: (1)Collection Collection (2)Map Map 可以看到它们之间的关系纷繁复杂,如果不系统的学习一下,还真

js 定义像java一样的map方便取值

js 定义像java一样的map方便取值. 百度有位大神说"js对象本身就是一种Map结构",这真是一段让人欢天喜地的代码. <script> //定义一个全局map var map = {}; var key0 = '0'; var key1 = '1'; map[key0] = '0-真实报文'; map[key1] = '1-虚拟报文'; //row 获取这行的值 ,index 获取索引值 function testJsMap(key){ //如果遍历map for(

java 中遍历Map的几种方法

转自: http://blog.csdn.net/wzb56/article/details/7864911 方法分为两类: 一类是基于map的Entry:map.entrySet(); 一类是基于map的key:map.keySet() 而每一类都有两种遍历方式: a.利用迭代器 iterator: b.利用for-each循环: 代码举例如下 package cn.wzb; import java.util.ArrayList; import java.util.HashMap; impor

java中遍历MAP的几种方法

java中遍历MAP的几种方法 Java代码 Map<String,String> map=new HashMap<String,String>();    map.put("username", "qq");    map.put("passWord", "123");    map.put("userID", "1");    map.put("em

[Java] 多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)

比较Java原生的 3种Map的效率. 1.  TreeMap 2.  HashMap 3.  ConcurrentSkipListMap 结果: 模拟150W以内海量数据的插入和查找,通过增加和查找两方面的性能测试,结果如下: Map类型 插入 查找(在100W数据量中)   10W 50W 100W 150W 0-1W 0-25W 0-50W Concurrent SkipListMap 62 ms 227 ms 433 ms 689ms 7 ms 80 ms 119 ms HashMap

Java编程之Map中分拣思想。

题目:给定一个字符串,求出字符串中每一个单词在字符串中出现的次数 旨意:map的分拣思想. 每一个key的包装类,存放出现的次数 1 /** 2 * 作为包装类,用来存放英文单词,和该英文单词出现的次数 3 * @ClassName: Str 4 * @Description: TODO(这里用一句话描述这个类的作用) 5 * @author 尚晓飞 6 * @date 2014-7-30 下午6:57:29 7 * 8 */ 9 public class Str { 10 private St