Java中Set、List、Map集合类(接口)的特点及区别。分别有哪些常用实现类。
Java中的集合包括三大类,它们是Set、List和Map。它们都处于java.util包中,Set、List和Map都是接口。Set中的对象不按特定方式排序,并且没有重复对象。但它的有些实现类能对集合中的对象按特定方式排序,例如TreeSet类,它可以按照默认排序,也可以通过实现java.util.Comparator接口来自定义排序方式。List中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象,如通过list.get(i)方式来获得List集合中的元素。Map中的每一个元素包含一个键对象和值对象,它们成对出现。键对象不能重复,值对象可以重复。
Map的功能方法 :
方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Object key)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。
标准的Java类库中包含了几种不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。执行效率是Map的一个大问题。看看get()要做哪些事,就会明白为什么在ArrayList中搜索“键”是相当慢的。而这正是HashMap提高速度的地方。HashMap使用了特殊的值,称为“散列码”(hash code),来取代对键的缓慢搜索。
“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法。
1、Set存储元素特点:不允许有重复的元素
add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true;当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。
2、List存储元素特点:有先后顺序,允许有相同的元素
多次调用add(Object)方法时,每次加入的对象按先来后到的顺序排序,也可以插队,即调用add(int index,Object)方法,就可以指定当前对象在集合中的存放位置。
3、Map存储元素特点:提供key到value的映射,value可多值
Map是双列的集合,存放用put方法:put(obj key,obj value),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。
List与Set都是单列元素的集合,它们有一个功共同的父接口Collection。Map没有继承Collection接口,Map提供key到value的映射。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
扩展资料:
1、List接口实现类
LinkedList,ArrayList,Vector
2、Set接口实现类:
HashSet(底层由HashMap实现),LinkedHashSet
3、Map接口实现类:
HashMap,HashTable,LinkeHashMap
参考资料来源:百度百科-Collection接口
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变;
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变;
Map:适合储存键值对的数据。
List 的数据存储方式和查询方式(数组下标)与数组类似 方便查找
Map 是以键值对的方式进行存储 多用于用户登录名记录
Set 有时用于重复值过滤
Set无序,元素唯一 常用实现类有HashSet,TreeSet
List有序的,可以重复 常用实现类有ArrayList,LinkedList
Map是以键值出现的 常用实现类有HashMap,TreeMap
SET无序,不可重复
List有序,可重复
Map是成对放的,一放一对。。分成KEY和VALUE
List:是存储单列数据的集合,存储的数据是有序并且是可以重复的
Map:存储双列数据的集合,通过键值对存储数据,存储 的数据是无序的,Key值不能重复,value值可以重复 key和value是一一对应的
关系
这张图简单揭示了Set、List与Map之间的相对关系。
Collection接口
Collection是Java中最基本的集合接口。它描述了一组有关集合操作的方法。
int Size(); //集合大小
boolean isEmpty(); //是否为空
boolean contains(Object o); //是否包含某个对象
Iterator<E> iterator(); //返回一个迭代对象,用来遍历集合中的元素
Object[] toArray(); //将集合中的元素以数组形式然后返回
<T> T[] toArray(T[] a); //上一个方法的泛型形式
boolean add(E e); //将对象e添加进集合,添加成功则返回true
boolean remove(Object o); //移除某个元素
boolean containsAll(Collection<?> c); //传入一个集合c,如果c中的元素都存在,则返回true
boolean addAll(Collection<? extends E> c); //将集合c中的元素全部添加进本集合
boolean removeAll(Collection<?> c); //本集合减去c集合中的元素
boolean retainAll(Collection<?> c); //取本集合和c集合的交集
void clear(); //清空集合
boolean equals(Object o); //判断相等
int hashCode(); //获取集合当前的hash值
Collection、Set、List和Map都是接口,不能被实例化。
Set和List都继承自Collection,而Map则和Collection没什么关系。
Set和List的区别在于Set不能重复,而List可以重复。
Map和Set与List的区别在于,Map是存取键值对,而另外两个则是保存一个元素。
Set接口
Set接口直接继承自Collection接口,并且方法接口上也一模一样。Set对添加的元素有一些要求,其不允许出现重复的元素,并且元素之间没有次序。这相当于一个不允许重复的离散的集合。因此,添加进Set的元素类型需要定义equals方法。若是使用自定义的类,则应该重写equals方法来确保实现自己需要的功能。
Set接口主要实现了两个类:HashSet,TreeSet。
HashSet是按照哈希来存取元素的,因此速度较快。HashSet继承自抽象类AbstractSet,然后实现了Set、Cloneable、Serializable接口。
TreeSet也是继承自AbstractSet,不过不同的是其实现的是NavigableSet接口。而NavigableSet继承自SortedSet。SortedSet是一个有序的集合。其添加的元素必须实现了Comparable接口,因为其在添加一个元素的时候需要进行排序。NavigableSet则提供了更多的有关元素次序的方法。
LinkedHashSet也是Set的一个实现。和HashSet类似,只不过内部用链表来维护,按照元素插入次序来保存。
List接口
List接口也是继承自Collection。与Set不同的是,List可以存储重复的元素。主要有两种实现:ArrayList和LinkedList。
ArrayList没有什么好说的,就像传统的数组一样,有着很快的随机存取速度,但是插入删除的速度就很慢。
LinkedList则与ArrayList恰恰相反,因为用链表来保存数据,所以插入删除元素的速度很快,但是访问数据的速度就不如ArrayList了。
Map接口
Map(映射)是一个存储键值对的容器接口。每一个元素包含一个key对象和value对象,且元素不允许重复。
Map接口的实现有以下几个:
HashMap是最常用的一个实现。HashMap使用hash映射来存取数据,这个速度是相当快,是O(1)的速度。其容量capacity,和负载因子load factor可以在一开始设定。当元素个数达到capacity*load factor的时候,就会进行扩容。
LinkedHashMap和HashMap类似,只不过内部用链表来维护次序。因此遍历时候的顺序是其插入顺序。
TreeMap是基于红黑树的Map,插入的数据被有次序保存,并且有很高的效率。因此在遍历输出的时候可以得到排序的数据。但是这要求插入的数据实现了comparable接口。
总结
希望对您有所帮助!~
求AVA高手 我的电脑配置玩AVA 为什么一遇到人 开枪或者扔烟雾画面就会...
你的配置应该不会这样啊,你看看游戏设置里视频项点默认,然后分辨率调自己合适的试试。
国服AVA里英文语音都怎么翻译的
tank!(联军还可以说“get rpg hit that tank!”)请安放c4set the charge NOW!8.正在修理坦克!i'm repairing the tank!(同盟) they're repairing their tank,stop them!(联军)c4安装完毕! c4 done!9.请优先消灭坦克周围的敌人! let's wipe out the enemy first!(可能跟6搞混了)...
求AVA无线电通信时的语言翻译~~
请安放炸弹!set the charge NOW!8.正在修理坦克!i'm repairing the tank!(同盟) they're repairing their tank,stop them!(联军)c4安装完毕! c4 done!9.请优先消灭坦克周围的敌人! let's wipe out the enemy first!(可能跟6搞混了)发现c4! spoor on the c4!\/I found the C-bo...
AVA所有说的英文
Z: 1.冲锋 charge!\/go man!\/go go go! 2.稍等!全部停止! hold on!\/stop!\/wait! 3.发现敌人! it's the enemy!\/enemy spotted! 4.在后方!behind us!\/they're trying to flank us! 5.请求支援! help!\/i need help!\/request for back up! 6.请求掩护! keep firing i ...
AVA里人说话的内容
请安放炸弹!set the charge !请拆除炸弹!disarm the charge!集中火力消灭敌人!let's fall in and break through the line.8.正在修理坦克!\/敌人正在修理坦克 i'm repairing the tank!(\/back me up!) \/They're repairing their tank,stop them!c4安装完毕! c4 done!the enemy's se...
玩AVA的英语高手,帮忙告诉我AVA中Z、X、C的这些指令的英文哦 越多越好...
(爆破)请安放炸弹!set the charge now!8.正在修理坦克!i'm repairing the tank! they're repairing their tank,stop them!(爆破)c4安装完毕! c4 done!9.请优先消灭坦克周围的敌人! let's wipe out the enemy first!(爆破)发现c4! spoor on the c4!\/i found the c-bomb!
AVA语音的中文解释
请安放炸弹!set the charge !请拆除炸弹!disarm the charge!集中火力消灭敌人!let's fall in and break through the line.8.正在修理坦克!\/敌人正在修理坦克 i'm repairing the tank!(\/back me up!) \/They're repairing their tank,stop them!c4安装完毕! c4 done!the enemy's se...
战地之王AVA战术语都有哪些
请安放炸弹!set the charge !请拆除炸弹!disarm the charge!集中火力消灭敌人!let's fall in and break through the line.8.正在修理坦克!\/敌人正在修理坦克 i'm repairing the tank!(\/back me up!) \/They're repairing their tank,stop them!c4安装完毕! c4 done!the enemy's se...
AVA队长照相后英文无线电
(爆破)请安放炸弹!set the charge now!8.正在修理坦克!i'm repairing the tank! they're repairing their tank,stop them!(爆破)c4安装完毕! c4 done!9.请优先消灭坦克周围的敌人! let's wipe out the enemy first!(爆破)发现c4! spoor on the c4!\/i found the c-bomb!
求jiavascript解密
密码是 miao <SCRIPT> function stop(){ return false;} document.oncontextmenu=stop;<\/SCRIPT> <!-- function SymError(){ return true;} window.onerror = SymError;\/\/--> function PassConfirm() { var x=document.password.pass.value if (x=="miao") { window.open("gotothree.a...
别是痛经: 1、Java中的集合包括三大类,它们是Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类.Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap. ...
盈江县18947214080: java中list,set和map 的区别 - ?
别是痛经: Set,List,Map的区别 java集合的主要分为三种类型:Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组:数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存...
盈江县18947214080: Java集合类List/Set/Map的区别和联系 - ?
别是痛经: 常用的集合类有一下几种: List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类 Map结构的集合类:HashMap类,Hashtable类 Set结构的集合类:HashSet类,TreeSet类 Queue结构的集合:Queue接口 HashMap和Hashtable的区...
盈江县18947214080: Java中List、Set、Map接口之间的区别和联系 - ?
别是痛经: 首先list与set都继承于Collection,list序列的形式存储元素.所以取出来的顺序可能和放入顺序不同.set的特点是无法存放重复的元素.map一个映射不能包含重复的键;每个键最多只能映射一个值.以键值对存放数据以上三个都是接口且不能被实例化.
盈江县18947214080: Java中Set、List、Map集合类(接口)的特点及区别.分别有哪些常用实现类. - ?
别是痛经: list与Set、Map区别及适用场景1、List,Set都是继承自Collection接口,Map则不是2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的...
盈江县18947214080: Java中的Set List Map存储方式个各有什么不同 - ?
别是痛经: 你可以将任何东西放到一个List容器中,并在需要时从中取出.ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作....
盈江县18947214080: JAVA中的集合类.set list map 数据容器的请教?
别是痛经: map是带键值的容器,值是一个pair set是存储值的容器. map和set都基于红黑数 list是顺序容器,相当于链表的作用.
盈江县18947214080: java中list、set和map 在什么场景下使用? - ?
别是痛经: list 列表 set 集合 map 映射从词义上可以看出来它们的大概作用:列表是顺序存放对象的,可以有相同的对象,通过索引存取;集合是无序存放对象的,其中不能有重复的对象(唯一的,回忆高中时候数学中学习的集合特性),集合没有索引...
盈江县18947214080: Java实际开发中set,Map,List分别用在什么情况? - ?
别是痛经: 其实实际开发中 就list和map用的多点 list嘛 比如你从数据库里读了很多条记录 经过处理封装成对象 就可以装在一个该对象类型的list里面 就可以迭代访问里面每个对象,里面的对象是有顺序的,只有索引,你不能通过对他们取别的名字之类的得到她 ;map呢 是key-value组成的键值对;value可以是任意object;key是一个String;你可以通过key访问value;比如在servlet技术中 放在request里的东西 response 里的东西这些都是map;还有比如解析xml的时候 你读到的东西 也可以用map来保存
盈江县18947214080: JAVA里面的集合类中,List、Set、Map有什么比较具体的应用,书上讲的不太好理解?
别是痛经: 首先得明白这三者有什么异同点吧. List接口 它的实现类是容量可变的列表,可按索引访问集合中的元素,是有序的集合. 常用的实现类:ArrayList、LinkedList Set接口 不包含重复元素的Collection,也就是说Set中最多只能有一个null元素. ...