Java中List、Set、Map接口之间的区别和联系 Java中Set、List、Map集合类(接口)的特点及区别...

JAVA\u4e2d\uff0cCollection\uff0cList\uff0cSet\uff0cMap\u63a5\u53e3\u7684\u8054\u7cfb\u548c\u533a\u522b\u6709\u54ea\u4e9b\uff1f

\u7b80\u5355\u7684\u8bf4\u4e00\u4e0b, Collection \u662f\u4e00\u4e2a\u8f83\u9ad8\u7684\u62bd\u8c61\uff0cList, Set \u548c Map\u90fd\u662fCollection\u7684\u5b50\u63a5\u53e3

List\u7684\u7279\u5f81\uff1a \u5141\u8bb8\u91cd\u590d\u5143\u7d20\uff0c\u5b58\u50a8\u987a\u5e8f\u4e0e\u63d2\u5165\u5143\u7d20\u987a\u5e8f\u4e00\u81f4
Set \u7279\u5f81\uff1a \u4e0d\u5141\u8bb8\u91cd\u590d\u5143\u7d20(\u548c\u6570\u5b66\u4e2d\u7684\u96c6\u5408\u4e00\u6837)\uff0c\u4e0d\u4fdd\u8bc1\u5143\u7d20\u5b58\u50a8\u987a\u5e8f
Map: \u5b58\u50a8\u5143\u7d20\u662f\u4e00\u7cfb\u5217 Key => Value (\u952e=>\u503c)

Set\u65e0\u5e8f\uff0c\u5143\u7d20\u552f\u4e00
\u5e38\u7528\u5b9e\u73b0\u7c7b\u6709HashSet,TreeSet
List\u6709\u5e8f\u7684\uff0c\u53ef\u4ee5\u91cd\u590d
\u5e38\u7528\u5b9e\u73b0\u7c7b\u6709ArrayList,LinkedList
Map\u662f\u4ee5\u952e\u503c\u51fa\u73b0\u7684
\u5e38\u7528\u5b9e\u73b0\u7c7b\u6709HashMap,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~~里面说的都很详细

  • java绫讳腑涓轰粈涔堣缃set鍜実et鏂规硶鎿嶄綔灞炴
    绛旓細sex鍙帴鍙椾袱涓硷紝 'M '鍜 'F '锛屼絾濡傛灉浣犳妸sex瀛楁璁句负public锛屼綘寰堥毦闄愬埗浣犵殑鐢ㄦ埛鍙粰瀹冭祴 'M '鎴 'F '鍊笺傚皢sex璁句负private锛屽啀鐢╯etSex()鏉ヨ缃у埆锛屼綘灏卞畬鍏ㄥ彲浠ユ帶鍒惰繖绉嶈涓轰簡銆傝屼笖浣犺繕鍙互鎺у埗鍙兘get涓嶈兘set锛鎴栫浉鍙嶏紝浣嗗鏋滄槸public灏变笉琛屼簡銆傚埆澶栨湁涓鐐瑰睘鎬ф垜浠彲鑳藉苟涓嶅笇鏈...
  • 鎯虫洿鍔犳繁鍏鐨瀛︿範java,璇ヤ粠鍝柟闈㈠叆鎵嬪晩
    绛旓細涓轰粈涔堟渶鍚庡ソ鏄涔Java浜嗗憿銆傛槸鍥犱负鎴戠湅鍒扮敤Java鏋勫缓鐨刉EB搴旂敤绋嬪簭寰堜笉閿欙紝瀹炵幇鐨勫姛鑳戒篃寰堝锛屽湪鐜板湪鐨勭綉缁滅ぞ浼氶噷锛岃偗瀹氫細鏈変竴鐣綔涓猴紝鑰屼笖鎴戝凡缁忓繊鍙椾笉浜M$鐨勪唬鐮佸皝閿侊紝鎵浠ヨ浆鎶旿ava浜嗐傚涔燡ava宸茬粡8涓湀浜嗭紝鍦ㄨ繖閲岃窡澶у璇翠笅蹇冨緱锛屾垜鍒氬紑濮嬫槸鐪<<Thinking in Java>> 绗笁鐗堬紝鍥犱负瀛︽牎娌″紑Java璇...
  • java list闆嗗悎涓娊鍙栨瘡涓瓧绗︿覆鍏冪礌涓鐨鏁板瓧杩涜鎺掑簭
    绛旓細鍒嗘瀽闂锛岄泦鍚堜腑姣忎竴涓厓绱犻兘鍚湁鏁板瓧锛岄渶瑕佸緱鍒閲岄潰鐨鏁板瓧瀛樺叆涓涓泦鍚堟垨鑰呮暟缁勪腑 寰幆閬嶅巻瀛楃涓诧紝鏍规嵁涓嬫爣鍒ゆ柇姣忎竴涓瓧绗︽槸鍚︽槸鏁板瓧锛屾槸鐨勮瘽鍔犲叆涓涓┖鐨勫瓧绗︿覆涓紝閬嶅巻涓閬嶅悗寰楀埌鍘熷瓧绗︿覆涓殑鏁板瓧瀛楃涓诧紝杞崲鎴愭暟瀛楀瓨鍏ユ暟缁勶紝杩涜鍗囧簭鎺掑簭 import java.util.ArrayList;import java.util.Arrays;public ...
  • JAVA鐨闂list.get(n).setBalance(list.get(n).getBalance() + m);
    绛旓細浣list涓n涓厓绱犵殑balance澧炲姞m
  • java:jdk1.4鍜宩dk1.5鐨勬湁閭d簺鍖哄埆(瓒婅缁嗚秺濂)?
    绛旓細鍥犳,鎴戜滑鍙兘浣跨敤Java 5涔嬪墠鐗堟湰鐨勮凯浠f柟娉曘 椤轰究璇翠竴涓,杩欓噷闇瑕佹敞鎰忕殑鏄,鐢变簬Iterator鏄硾鍨,鎵浠...List<? super Number>鏄竴涓‘鍒団滃厓绱犵被鍨嬧濇湭鐭ョ殑鍒楄〃,浣嗘槸鍙兘鏄疢number,鎴栬匩umber鐨勮秴绫诲瀷銆傛墍浠...鐒惰,濡傛灉甯屾湜鍙嶈浆杩斿洖涓涓柊鐨凩ist,閭d箞鍙兘浼氬笇鏈涙柊List鐨勫厓绱犵被鍨嬩笌浼犲叆鐨凩ist鐨勭被鍨嬬浉鍚屻傚湪杩欑...
  • Java涓HashMap鍜孒ashtable鍙奌ashSet鐨勫尯鍒
    绛旓細Map Collections.synchronizedMap(Map m)杩欎釜鏂规硶杩斿洖涓涓悓姝ョ殑Map锛岃繖涓狹ap灏佽浜嗗簳灞傜殑HashMap鐨勬墍鏈夋柟娉曪紝浣垮緱搴曞眰鐨凥ashMap鍗充娇鏄湪澶氱嚎绋嬬殑鐜涓篃鏄畨鍏ㄧ殑銆(3)鍙湁HashMap鍙互璁╀綘灏嗙┖鍊间綔涓轰竴涓〃鐨勬潯鐩殑key鎴杤alue銆侶ashMap涓彧鏈変竴鏉¤褰曞彲浠ユ槸涓涓┖鐨刱ey锛屼絾浠绘剰鏁伴噺鐨勬潯鐩彲浠ユ槸绌虹殑value銆
  • java涓浠涔堝彨娉涘瀷??
    绛旓細鐞嗘兂鎯呭喌涓,鎮ㄥ彲鑳戒細寰楀嚭杩欐牱涓涓鐐,鍗 m 鏄竴涓 Map,瀹冨皢 String 閿槧灏勫埌 String 鍊笺傝繖鍙互璁╂偍娑堥櫎浠g爜涓殑寮哄埗绫诲瀷杞崲,鍚屾椂鑾峰緱涓涓檮鍔犵殑绫诲瀷妫鏌ュ眰,璇ユ鏌ュ眰鍙互闃叉鏈変汉灏嗛敊璇被鍨嬬殑閿垨鍊间繚瀛樺湪闆嗗悎涓傝繖灏辨槸娉涘瀷鎵鍋氱殑宸ヤ綔銆 娉涘瀷鐨勫ソ澶Java 璇█涓紩鍏ユ硾鍨嬫槸涓涓緝澶х殑鍔熻兘澧炲己銆備笉浠呰瑷銆...
  • java涓鈥済et鈥濆拰鈥set鈥濇柟娉曟庝箞鍐?
    绛旓細鐢ㄤ簬鏀堕泦椤甸潰鐨勬暟鎹紙灏辨槸涓婇潰閭d釜javabean鐨勯棶棰橈級锛 struts2鍜宻pring MVC 鐪佸幓浜唂ormbean锛 鍚庡彴澶勭悊鐨刟ction灏辨槸涓涓猙ean, 鏁版嵁鍦╝ction涓洿鎺ュ彲浠ュ彇鍒般傛帹鑽愪竴涓畝鍗曠殑鏂规硶锛氬啓get/set鏂规硶锛孫C鏈変竴涓嚜鍔ㄥ寲鐨勬柟娉曪紝鍗充娇鐢ˊproterty鍜孈synthesize鍏抽敭瀛 Person.h Person.m ...
  • java涓鐨則oString()鏄粈涔堟柟娉?
    绛旓細import java.util.ArrayList; import java.util.List; public class HamsterMaze { @SuppressWarnings("unchecked") public static void main(String[] args...testBean.setId(9); System.out.println(testBean.toString()); } } 缁撴灉 {id:9} Exception() 鏋勯犺缁嗘秷鎭负 null 鐨勬柊寮傚父銆 Exception(String mes...
  • java鍏ㄥ眬鍙橀噺 鍦ㄤ竴涓柟娉曚腑鏀瑰彉瀹鐨鍊,鎬庢牱鍦ㄥ彟涓涓柟娉曚腑浣跨敤鏀瑰彉鍚庣殑...
    绛旓細鍝堝搱 闂殑鎸烘繁濂ュ晩 绠鍗曠殑璇达紝鍦ㄤ竴涓柟娉曚腑鏀瑰彉鍊间簡锛岀敱浜庢槸鍏ㄥ眬鐨勶紝鍥犳 鏃犺鍦ㄥ叾浠栦粈涔堝湴鏂硅皟鐢ㄨ繖涓紝閮芥槸鏀瑰彉鍚庣殑鍊硷紝瑕佷笉灏变笉鑳藉彨鍋氬叏灞鍙橀噺浜 浣犲湪璋冪敤鐨勬椂鍊欎笉鏄繖鏍峰悧锛熷鏋滀笉鏄 閭h繕鏈変竴绉嶅彲鑳斤紝鍦ㄧ涓涓柟娉曚腑锛屾湁瀹氫箟浜嗕竴涓悓鍚嶇殑鍙橀噺 姝ゆ椂鐨勮瘽锛屾柊瀹氫箟鐨勪細灞忚斀鍏ㄥ眬鍙橀噺銆傛棤璁烘庝箞...
  • 扩展阅读:开鲁网站卖馒头 ... 好看的imx大片 ... xboxone港版欧版美版区别 ... www.968777.cn ... www.sony.com.cn ... 在线linux入口 ... java.52emu.cn ... javascript void ... 珲春欧亚今日电影 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网