A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王得新 中级黑马   /  2012-10-1 20:19  /  1978 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王得新 于 2012-10-3 19:18 编辑

这几天,看了毕老师的有关集合的视频,看是看懂了
可是那么多集合,像set list  map  collections........这些一弄在一起,怎么用就犯混了,
麻烦高手能不能一个个举个例子都说明它们什么情况下用,怎么用(很麻烦!先谢谢各位了)


评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
collections  就是 set和list集合的老大
list集合按顺序存入取出
set集合保证集合内的内容唯一(不重复),并且能进行自然排序
map集合就是键值对,2个元素

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
先谢谢楼上的回复,你说的我都懂啊,我是问,具体怎么用,主要是什么情况下用,最好能举个实用的例子?
回复 使用道具 举报
要知道怎么用他们首先,你要知道他们的特点:
set:无序,唯一
list:有序,不唯一(即可重复)
map:key唯一,value可重复 而且map是键值对,key的地位比较高

1.所以,当我们需要保证集合里面的对象是唯一的,那么我们就要想到set或者map,然后再次判断,我们面临的实际问题的情况是什么样的?
是只用存储,不用根据某个key来获取value的话,那么我们就只用使用set就oK;如果是需要存储的对象是需要通过某一个条件(key)来检索出来的话,那么建议使用map

2.如果我们只是为了存储对象,无所谓对象是否需要重复的话,那么建议使用list。还有,如果我们需存进集合中的对象是有序的的话,那么建议使用list,不要使用set,因为set是无序存储

完毕,希望能帮助到楼主!^^

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
王得新 发表于 2012-10-1 20:50
先谢谢楼上的回复,你说的我都懂啊,我是问,具体怎么用,主要是什么情况下用,最好能举个实用的例子?
...

都知道他们的特点了 还能不知道怎么用吗?
回复 使用道具 举报
Collection:
        |--List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
        |--Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性。
List接口:
  List本身是Collection接口的子接口,具备了Collection的所有方法。现在学习List体系特有的共性方法,查阅方法发现List的特有方法都有索引,这是该集合最大的特点。
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
        |--ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。
        |--LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。
        |--Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。

Set接口:
         |--HashSet:底层数据结构是哈希表,线程是不同步的。无序,高效;
                 HashSet集合保证元素唯一性:通过元素的hashCode方法,和equals方法完成的。
                 当元素的hashCode值相同时,才继续判断元素的equals是否为true。
                 如果为true,那么视为相同元素,不存。如果为false,那么存储。
                 如果hashCode值不同,那么不判断equals,从而提高对象比较的速度。
       |--LinkedHashSet:有序,hashset的子类。
         |--TreeSet:对Set集合中的元素的进行指定顺序的排序。不同步。TreeSet底层的数据结构就是二叉树。

对于ArrayList集合,判断元素是否存在,或者删元素底层依据都是equals方法。
对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode方法和equals方法。

Map集合:
  |--Hashtable:底层是哈希表数据结构,是线程同步的。不可以存储null键,null值。
  |--HashMap:底层是哈希表数据结构,是线程不同步的。可以存储null键,null值。替代了Hashtable.
 |--TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序。

Map集合存储和Collection有着很大不同:
 Collection一次存一个元素;Map一次存一对元素。
 Collection是单列集合;Map是双列集合。
 Map中的存储的一对元素:一个是键,一个是值,键与值之间有对应(映射)关系。
  特点:要保证map集合中键的唯一性。



评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
collections 是collection的工具类

如果是键值对,用map
顺序存入和取出,有角标,有重复的数据,用list,ArrayList查询快,增删慢,LinedList查询很慢,增删快
如果集合中不能有重复的数据,用set,要进行指定顺序的排序,用TreeMap.

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
牛杨 中级黑马 2012-10-1 22:59:43
8#
楼主,还是练得少啊。这些知识并时不时说,学一下立马就能很明白的。还得以后的时候,多练练,多看看。然后就知道,哪里是薄弱环节,哪里是重点了。
回复 使用道具 举报
嗯,一大早打开电脑,看到怎么多人回复,很感激!多谢各位的帮忙!
回复 使用道具 举报
list 和set 有共同的父类 它们的用法也是一样的 唯一的不太就是set中不能有相同的元素 list中可以
list和set的用途非常广泛 list可以完全代替数组来使用
map 是独立的合集 它使用键值对的方式来储存数据 键不能有重复的 值可以用
map不像上边两种集合那个用的广泛 不过在servlet 和jsp中 map可是绝对的重中之重 页面之间传值全靠map
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马