Java中List、Set、Map接口之间的区别和联系

作者&投稿:习璧 (若有异议请与网页底部的电邮联系)
JAVA中,Collection,List,Set,Map接口的联系和区别有哪些?~

简单的说一下, Collection 是一个较高的抽象,List, Set 和 Map都是Collection的子接口

List的特征: 允许重复元素,存储顺序与插入元素顺序一致
Set 特征: 不允许重复元素(和数学中的集合一样),不保证元素存储顺序
Map: 存储元素是一系列 Key => Value (键=>值)

Set无序,元素唯一
常用实现类有HashSet,TreeSet
List有序的,可以重复
常用实现类有ArrayList,LinkedList
Map是以键值出现的
常用实现类有HashMap,TreeMap

List 用于遍历一个数组时效率最高;比如在循环显示所有信息时经常用到;
Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象;虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。 Map 就是键值对map(键,值),键是Sting 类型 值是Object (对象类型),所以在知道某条信息的一项时查询其他项就用该方法,效率最高!(以上个人见解!)
详细:数组和其它容器的区别主要有三方面:效率,类型,和保存基本类型的能力.在Java中,数组是一种效率很高的存储和随机访问对象引用序列的方式.数组是一 个简单的线性序列,因此访问速度很快,但也损失了其它一些特性.创建一个数组对象后,大小就固定了,如果空间不够,通常是再创建一个数组,然后把旧数组中 的所有引用移到新数组中.数组可可以保存基本类型,容器不行.
容器类不以具体的类型来处理对象,而是将所有的对象都以Object类型来处理,所以我们可以只创建一个容器,任意的Java对象都可以放进去.容器类可 以使用包装类(Integer,Double等),以便把基本类型放入其中. List Set Map 都可以自动调整容量,数组不能.

Collection表示一组对象,这些对象也称为collection的元素。一些 collection允许有重复的元素,而另一些则不允许。一些collection是有序的,而另一些则是无序的。JDK中不提供此接口的任何直接实 现,它提供更具体的子接口(如 Set 和 List)实现.

Map 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值.Map 接口提供三种collection视图,允许以键集、值集合或键值映射关系集的形式查看某个映射的内容。某些映射实现可明确保证其顺序,如 TreeMap(有序) 类;某些映射实现则不保证顺序,如 HashMap(无序) 类。Map可以像数组那样扩展成多维数组,只要把每个值也做成一个Map就行了.

Collection和Map是Java容器中的两种基本类型. 区别在于容器中每个位置保存的元素个数.Collection每个位置只能保存一个元素,包括List和Set.其中List以进入的顺序保存一组元素; 而Set中的元素不能重复.ArrayList是一种List,HashSet是一种Set,将元素添加入任意Collection都可以使用add() 方法.Map保存的是健值对.使用put()为Map添加元素,它需要一个健和一个值作参数.

ArrayList和LinkedList都实现了List接口,ArrayList底层由数组支持LinkedList由双向链表支持,因此,如果经常在表中插入或删除元素LinkedList比较适合,如果经常查询ArrayList比较适合.
Set的实现有TreeSet,HashSet,LinkedHashSet,HashSet查询速度最快,LinkedHashSet保持元素插入次序,TreeSet基于TreeMap,生成一个总是处于排序状态的Set.

Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet

Vector : 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能走入Array的限制。性能也就不可能超越Array。所以,在可能的情况下,我们要多运用Array。另外很重要的一点就是Vector“sychronized”的,这个也是Vector和ArrayList的唯一的区别。

ArrayList:同Vector一样是一个基于Array上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。

LinkedList:LinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。

List总结:

1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];

2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];

3. 所有的List中可以有null元素,例如[ tom,null,1 ];

4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。

HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。看看HashSet的add(Object obj)方法的实现就可以一目了然了。

public boolean add(Object obj)
{
return map.put(obj, PRESENT) == null;
}

这个也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMap的key是不能有重复的。

LinkedHashSet:HashSet的一个子类,一个链表。

TreeSet:SortedSet的子类,它不同于HashSet的根本就是TreeSet是有序的。它是通过SortedMap来实现的。

Set总结:

1. Set实现的基础是Map(HashMap);

2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象;

http://user.qzone.qq.com/530536333/blog/1283866146

List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。

Set接口也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法,Arrays则是对一个数组进行类似的操作。

Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。Map有两种比较常用的实现:HashMap和TreeMap。HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单,用pub(Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象。

首先list与set都继承于Collection,list序列的形式存储元素。所以取出来的顺序可能和放入顺序不同。set的特点是无法存放重复的元素。map一个映射不能包含重复的键;每个键最多只能映射一个值。以键值对存放数据以上三个都是接口且不能被实例化。



首先list与set都继承于Collection,list序列的形式存储元素。所以取出来的顺序可能和放入顺序不同。set的特点是无法存放重复的元素。map一个映射不能包含重复的键;每个键最多只能映射一个值。以键值对存放数据以上三个都是接口且不能被实例化。

List叫有序集合,Set是无序集合。map是哈希表结构的,也就是key—value。想了解具体的可以去看java的api~~里面说的都很详细


怎样才有更高机会获得AVA莫辛—纳甘
楼主您好抽奖你看你的运气的。这个没有任何的技巧的。你可以找人少的时候去。这样就不会抽到一半被别人抽走了。 逝 呿。 很荣幸的为您解答。如有疑问请继续追问。我会在收到的第一时间为您解答。

战地之王体验服5.4更新不了,急求!!!
AVA 体验服0.5.4版本很多人都是这种情况!http:\/\/gamebbs.qq.com\/cgi-bin\/data\/cgi_bbs_read_list.cgi?groupid=202:30568 应该是腾讯的问题吧,再等等吧,估计过不了多长时间腾讯会解觉得!

Spring +Hibernate整合后SQL 出现ava.lang.ClassCastException: 异常_百...
ClassCastException类型转换异常,但是你说能在jsp页面执行说明转换是没有问题,那就应该是2个对象在加载时使用了不同的 ClassLoader,应该是。

ava.sql.SQLException: You have an error in your SQL syntax_百度知 ...
fileid是什么数据类型的?如果是数字的,试试把单引号去掉:String sql = "select * from tblFile where fileID=" + fileID;

在JSP中如何实现分页技术啊?
import java.util.List; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; \/** * Title: 分页对象 * Description: 用于包含数据及分页信息的对象 * Page类实现了用于显示分页信息的基本方法,但未指定所含数据的类型, * 可根据需要实现以特定方式组织数据的子类, *如RowSe...

在所有磁盘搜索iso文件
1.windows自带的搜索,要用".iso"作为关键字。2.搜索软件的建议 Ava Find Pro 1.5 下载点 http:\/\/www.hanzify.org\/index.php?Go=Show::List&ID=9965 AvaFind Pro 也许是迄今为止你所能发现的最好最安全的 硬盘搜索工具。听到这句话,有人也许会不屑一顾:我用 XX 硬盘搜索,真的很好用哦。

list of english names with chinese
i just wanna coorect your little mistake amid your inquiry.the right way to spell this word should be "equivalent".

tomcat 启动报ava.lang.NoClassDefFoundError
应该是你的JDK的版本太低了,你重新安装下JDK,版本最好是1.6的,然后配置下环境变量,就可以了,我以前也出现过

什么游戏和穿越火线差不多
逆战、使命召唤ol、突击风暴、战地ol、ava、火力风暴等等很多游戏和穿越火线差不多。游戏讲述了全球两大佣兵集团GlobalRisk和BlackList间的对决。游戏中有团队模式、战队赛、爆破模式、幽灵模式等多种模式。引进了“缺人补充”形式的即时加入系统。

有什么好玩的FPS类游戏
《使命召唤:黑色行动》游戏背景为冷战时期,玩家将扮演一名精英特种部队SOG的士兵,进入包括苏联境内、乌拉尔山以及越南等冷战时期的冲突地带,深入敌后进行秘密行动,在没有任何援兵的情况下完成所有的任务。2、穿越火线:《穿越火线》游戏讲述了全球两大佣兵集团Global Risk和Black List间的对决。游戏中有...

向阳区19775193663: java中list和map的区别 -
兀有弯金振: 1、Java中的集合包括三大类,它们是Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类.Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap. ...

向阳区19775193663: java中list,set和map 的区别 -
兀有弯金振: Set,List,Map的区别 java集合的主要分为三种类型:Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组:数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存...

向阳区19775193663: Java中Set、List、Map集合类(接口)的特点及区别.分别有哪些常用实现类. -
兀有弯金振: list与Set、Map区别及适用场景1、List,Set都是继承自Collection接口,Map则不是2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的...

向阳区19775193663: Java集合类List/Set/Map的区别和联系 -
兀有弯金振: 常用的集合类有一下几种: List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类 Map结构的集合类:HashMap类,Hashtable类 Set结构的集合类:HashSet类,TreeSet类 Queue结构的集合:Queue接口 HashMap和Hashtable的区...

向阳区19775193663: Java中的Set List Map存储方式个各有什么不同 -
兀有弯金振: 你可以将任何东西放到一个List容器中,并在需要时从中取出.ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作....

向阳区19775193663: java中list、set和map 在什么场景下使用? -
兀有弯金振: list 列表 set 集合 map 映射从词义上可以看出来它们的大概作用:列表是顺序存放对象的,可以有相同的对象,通过索引存取;集合是无序存放对象的,其中不能有重复的对象(唯一的,回忆高中时候数学中学习的集合特性),集合没有索引...

向阳区19775193663: Java中List、Set、Map接口之间的区别和联系 -
兀有弯金振: 首先list与set都继承于Collection,list序列的形式存储元素.所以取出来的顺序可能和放入顺序不同.set的特点是无法存放重复的元素.map一个映射不能包含重复的键;每个键最多只能映射一个值.以键值对存放数据以上三个都是接口且不能被实例化.

向阳区19775193663: Java实际开发中set,Map,List分别用在什么情况? -
兀有弯金振: 其实实际开发中 就list和map用的多点 list嘛 比如你从数据库里读了很多条记录 经过处理封装成对象 就可以装在一个该对象类型的list里面 就可以迭代访问里面每个对象,里面的对象是有顺序的,只有索引,你不能通过对他们取别的名字之类的得到她 ;map呢 是key-value组成的键值对;value可以是任意object;key是一个String;你可以通过key访问value;比如在servlet技术中 放在request里的东西 response 里的东西这些都是map;还有比如解析xml的时候 你读到的东西 也可以用map来保存

向阳区19775193663: Java集合中List和 Map区别? -
兀有弯金振: 一个是存储单列数据的集合,,另外一个是存储键和值这样的双列数的集合,List中存储的数据是有顺序的,并且允许重复...Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的...List继承Collection接口,,Map不继承Collection接口.

向阳区19775193663: 劳驾前辈给我说说Java的集合框架中的maplist和set这三个怎么区分什么时候什么情况用哪一个?
兀有弯金振: map集合,对象以键值对的形式存放在集合中,并且键它是不允许重复的.常用的实现是HashMap和TreeMap,HashMap能够快速的查询到一个键,而TreeMap则是对键按序存放的.list接口是对collection的扩充,它允许存放相同的元素.常用的...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网