既然set是基于map实现的,为什么还要用set?

zhang227xb 2011-07-21 12:24:54
好像set需要重写方法,提高效率,map不需要吗?不知道理解的是否有错,希望指点

...全文
815 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
kafen88 2011-08-01
  • 打赏
  • 举报
回复
如果要这样说,所有的数据结构有数组就够了。。。我可以用数组实现一切结构。难道其它就没有存在的价值了么
kafen88 2011-08-01
  • 打赏
  • 举报
回复
功能不同啊。。。set有改进,比如支持去掉重复等。。
superhill 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zl3450341 的回复:]

主要还是看应用场合啊。

比如去除重复数据,你用map好做还是set方便列?你要查找某个值,那个方便列
[/Quote]



2楼早已经解答了。

虽然说只要用set的地方就能用map来替代实现,你也可以自己基于map实现,jdk这样是为了方便你在有些特定的情况下使用,哪天你用到就知道了。
wangfeiwoyun 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 xiachedan 的回复:]
反问一下,hashmap和hashtable的区别都知道,如果对hashmap增加同步方法,然后稍加改造,那么两者就没有区别了,是不是hashtable也该下课了
[/Quote]
我觉得Hashtable是该下课了
微风飘过 2011-07-31
  • 打赏
  • 举报
回复
set可以避免重复数据,而map没这个功能
JavaBoyCaoJi 2011-07-30
  • 打赏
  • 举报
回复
比如去除重复数据,你用map好做还是set方便列?你要查找某个值,那个方便列
liboofsc 2011-07-28
  • 打赏
  • 举报
回复
Map很多时候更符合人们表述问题的习惯:
比如,姓名:王麻子 年龄:80 身高:80
就是一个key-value键值对的一个表述习惯.

你直接说80,别人怎么知道你说的啥呢?

而set则适用于和上述表述完全不同的另一种场合.
他只包含了MAP中的keyset部分.
你直接把姓名,年龄,身高这三个String放在keyset里,意义大吗?
更多时候我们是把Person(姓名,年龄,身高)这样的对象放在Set集中.
dong_very_good 2011-07-28
  • 打赏
  • 举报
回复
同意15楼的说法。场景不同,使用的也不同。
iis81365341 2011-07-28
  • 打赏
  • 举报
回复
可以使用Set的地方就可以使用Map,但是使用Map没有使用Set简洁。
如:
Set<String> set = new HashSet<String>();
set.add("aaa");
Iterator<String> its = set.iterator();
while(its.hasNext())
{
System.out.println(its.next());
}

Map<String,Object> map = new HashMap<String, Object>();
map.put("aaa", new Object());
Iterator<String> itm = map.keySet().iterator();
while(itm.hasNext())
{
System.out.println(itm.next());
}
xiachedan 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhang227xb 的回复:]
额~~~不会就因为看的爽就这么设计吧?我的意思有没有哪种情况是只能set去实现的,或者set实现上优势很大?现在感觉map就包含set嘛,那set有存在的必要吗
[/Quote]

按照这个思路,spring\struts等工具都是基于java api实现的,也可以不存在了。

反问一下,hashmap和hashtable的区别都知道,如果对hashmap增加同步方法,然后稍加改造,那么两者就没有区别了,是不是hashtable也该下课了
  • 打赏
  • 举报
回复
set存储的是不可以重复的但是无序的集合,有些需求必须使用set集合。
lcj_up 2011-07-27
  • 打赏
  • 举报
回复
一个不包含重复元素的集合,较List可以去除重复。
而map时(key,value)的集合,之间的差距。。。
lcj_up 2011-07-27
  • 打赏
  • 举报
回复

import java.util.HashMap;
import java.util.Map;

public class NewCal {
public static void main(String[] args) {


Map<String,String> map = new HashMap<String,String>();
map.put("123","123");
map.put("123","124");

System.out.println(map.size());
}
}

map也是只有唯一key的。
qq_348070857 2011-07-27
  • 打赏
  • 举报
回复
楼主主要记住map是存储键值对的,也就是经常说的key-value这个的用途是通过key可以很快的找到value,而set存放的东西不是键值对,而且存放的元素是没有顺序且不能重复的,就像数学里面的集合,另外还有一个list顺便也说一下吧,list和set的区别在于:list存放的有顺序且可以重复。set,list下面有很多实现他们的类,主要的有hashSet,LinkedList,ArrayList,map下有hashMap,TreeMap(二叉树,数据结构的知识),所有集合类都是继承collection这个接口,所以它里面的方法大家都可以用。不知这样解释楼主理解没有啊?
Java_Open_Source 2011-07-25
  • 打赏
  • 举报
回复
Set使用Map实现其功能只是一种方式罢了,
CopyOnWriteArraySet可以用ArrayList实现,
Set表示一个集合,集合中不允许有重复元素,
同样Map中的key也是一个集合,不允许重复元素,
用Map可以做Set的事情,
估计设计者的意图是为了将功能尽量
放到不同的类上实现。
pywepe 2011-07-25
  • 打赏
  • 举报
回复
个人感觉 编程方便
cstur4 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhang227xb 的回复:]

不是问map和set的存储区别,希望多说下set比map的优势在哪
[/Quote]
个人理解是封装吧,你不用知道set的低层是用map实现,只用知道它是个集合,至于代码复用是jdk实现set所采用的,只是一种实现。当然你可以自己利用map键的唯一性来实现set,但是set很常用,jdk就把它实现了
cstur4 2011-07-25
  • 打赏
  • 举报
回复
Map也是保证键的唯一性的,主要区别还是在Map保存了键到值的映射而不是像Set一样只是一个集合
cscxxx 2011-07-25
  • 打赏
  • 举报
回复
虽记不太清楚细部差异
但set似乎存储数据时相同的数据会覆写所以取数据时不会拿到重复的数据
yang3wei 2011-07-25
  • 打赏
  • 举报
回复
打发手动阀第三方萨达发送发送到
加载更多回复(22)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧