既然set是基于map实现的,为什么还要用set? 好像set需要重写方法,提高效率,map不需要吗?不知道理解的是否有错,希望指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不是问map和set的存储区别,希望多说下set比map的优势在哪 主要还是看应用场合啊。比如去除重复数据,你用map好做还是set方便列?你要查找某个值,那个方便列 方便?什么意思?难道map实现上比set要难嘛,或者资源消耗比set大?我没有对比查找的效率,但是hashset也是调用的hashmap去实现的啊,怎么会效率比map块 有的时候你就需要一个每项都是一个东西的集合,而不是需要一个每项都含一个键值对的集合就这样,用set看着双咯,这样就不是每项都是两个对象了,弄不清用的是键还是值 去重复数据,我只需要把所有的数据都添加进Set,Set会自动把重复的数据去掉。。 请问你用map实现起来有这么快捷吗?在查找数据时,我只要知道数据的key,我一次就能拿到这个数据。你用map又行么? 在查找数据时,我只要知道数据的key,我一次就能拿到这个数据。你用map又行么?set他们的优势不同,所以适用的场景也不同 额~~~不会就因为看的爽就这么设计吧?我的意思有没有哪种情况是只能set去实现的,或者set实现上优势很大?现在感觉map就包含set嘛,那set有存在的必要吗 楼主的意思是: 有string了 还要char干嘛.. 怎么不可以,set实现也是调用的map,只是把value设为一个常量而已 这个我也知道,我只是想知道有没有那种情况用set好,好在哪?不是看的爽那些 Set 内部用的是 Map 的 key 你来大连工作呀,我们技术交流哈,如果有朋友想来大连或者南京工作的么?加我QQ 希望我们成为朋友哈 我愿意帮你找工作 38562221 QQ 我觉得你上面的话有问题,不管是map还是set,都可以直接通过key取到对应的值,key和value在整个map中是唯一的,也就是说key在整个map中是唯一的,那么不管是在map还是在set中都可以马上取到而且是一次性的取到它对应的值,至于set可以去掉重复的值,而map在put的时候是比较盲目的,它不考虑添加的时候在map中是否存在,它只是完成添加就行,而不考虑重复的问题。在大多数情况下都是用Map的,但是当你想要的值是唯一的时候就需要用到set,set其实就是通过equal方法判断是否相同,如果你要的是对象唯一,那么你在定义对应的类的时候也要重写它对应的equal方法和hashcode方法,从而达到你想要的判断是否相等的依据。 灰常同意二楼,把我想说的都说了, 的确是这样, 场合不同而已,有一到两年java经验的人都知道什么时候该用set什么时候该用map只能体会 这两个用的地方不同嘛,楼主估计钻了个牛角尖,改天看看可能就突然明了了,毕竟需要成对存储的,需要键值对的总不能用set吧 楼主的意思是,什么时候只用 set 而不用 map . 但是只用 set 的时候却实际上使用了 map ,因为 jdk 中 set 是用 map 实现的。 为什么要用 set ? 楼主想想,如果没有的话, 你怎么存储单项无重复的数据项? 自己独立写一个 set 实现? 还是仍然借助 map 来实现? 还有一种解释: 你当然可以用 map 去搞定一切, 但有时候用 set 会更加方便一些。就是这样。同样, 你也可以继承 AbstractSet 来写自己的 set 实现。 你只是困惑于 jdk 的实现方式而已。 有个inputStream,为什么还要fileInputStream?同一接口下的不同实现~~~以对应不同的需求,就像IO有字节流,字符流,还有BufferedReader/Writer。 AbstractSet, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet盲人摸象 方便使用啊,map和set分别用于不同的场合嘛。set去重复,map是 key-value。 虽记不太清楚细部差异但set似乎存储数据时相同的数据会覆写所以取数据时不会拿到重复的数据 Map也是保证键的唯一性的,主要区别还是在Map保存了键到值的映射而不是像Set一样只是一个集合 个人理解是封装吧,你不用知道set的低层是用map实现,只用知道它是个集合,至于代码复用是jdk实现set所采用的,只是一种实现。当然你可以自己利用map键的唯一性来实现set,但是set很常用,jdk就把它实现了 Set使用Map实现其功能只是一种方式罢了,CopyOnWriteArraySet可以用ArrayList实现,Set表示一个集合,集合中不允许有重复元素,同样Map中的key也是一个集合,不允许重复元素,用Map可以做Set的事情,估计设计者的意图是为了将功能尽量放到不同的类上实现。 楼主主要记住map是存储键值对的,也就是经常说的key-value这个的用途是通过key可以很快的找到value,而set存放的东西不是键值对,而且存放的元素是没有顺序且不能重复的,就像数学里面的集合,另外还有一个list顺便也说一下吧,list和set的区别在于:list存放的有顺序且可以重复。set,list下面有很多实现他们的类,主要的有hashSet,LinkedList,ArrayList,map下有hashMap,TreeMap(二叉树,数据结构的知识),所有集合类都是继承collection这个接口,所以它里面的方法大家都可以用。不知这样解释楼主理解没有啊? 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的。 一个不包含重复元素的集合,较List可以去除重复。而map时(key,value)的集合,之间的差距 set存储的是不可以重复的但是无序的集合,有些需求必须使用set集合。 按照这个思路,spring\struts等工具都是基于java api实现的,也可以不存在了。反问一下,hashmap和hashtable的区别都知道,如果对hashmap增加同步方法,然后稍加改造,那么两者就没有区别了,是不是hashtable也该下课了 可以使用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()); } Map很多时候更符合人们表述问题的习惯:比如,姓名:王麻子 年龄:80 身高:80就是一个key-value键值对的一个表述习惯.你直接说80,别人怎么知道你说的啥呢?而set则适用于和上述表述完全不同的另一种场合.他只包含了MAP中的keyset部分.你直接把姓名,年龄,身高这三个String放在keyset里,意义大吗?更多时候我们是把Person(姓名,年龄,身高)这样的对象放在Set集中. 比如去除重复数据,你用map好做还是set方便列?你要查找某个值,那个方便列 set可以避免重复数据,而map没这个功能 2楼早已经解答了。虽然说只要用set的地方就能用map来替代实现,你也可以自己基于map实现,jdk这样是为了方便你在有些特定的情况下使用,哪天你用到就知道了。 功能不同啊set有改进,比如支持去掉重复等。。 java有没有多线程之间 通信 交换信息的开源库 新手练习问题 Could not find the mian class:NewJFrame,project will exit SuperDemo构造函数重载 类对象实例化问题 菜鸟问题:就是想问下如果我要在一个类中调用另一个类中的tf.getText()中的内容,该怎么弄呢? 怎样判断是int型还是String型? 高手进来接招呀~~~~ getRuntime()有什么用? 使用Borland的插件,JBuilder转exe的问题 toString问题 MSN IM API
就这样,用set看着双咯,这样就不是每项都是两个对象了,弄不清用的是键还是值
在查找数据时,我只要知道数据的key,我一次就能拿到这个数据。你用map又行么?
他们的优势不同,所以适用的场景也不同
这个我也知道,我只是想知道有没有那种情况用set好,好在哪?不是看的爽那些
灰常同意二楼,把我想说的都说了, 的确是这样,
场合不同而已,有一到两年java经验的人都知道什么时候该用set什么时候该用map
只能体会
但set似乎存储数据时相同的数据会覆写所以取数据时不会拿到重复的数据
CopyOnWriteArraySet可以用ArrayList实现,
Set表示一个集合,集合中不允许有重复元素,
同样Map中的key也是一个集合,不允许重复元素,
用Map可以做Set的事情,
估计设计者的意图是为了将功能尽量
放到不同的类上实现。
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的。
而map时(key,value)的集合,之间的差距
按照这个思路,spring\struts等工具都是基于java api实现的,也可以不存在了。反问一下,hashmap和hashtable的区别都知道,如果对hashmap增加同步方法,然后稍加改造,那么两者就没有区别了,是不是hashtable也该下课了
如:
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());
}
比如,姓名:王麻子 年龄:80 身高:80
就是一个key-value键值对的一个表述习惯.你直接说80,别人怎么知道你说的啥呢?而set则适用于和上述表述完全不同的另一种场合.
他只包含了MAP中的keyset部分.
你直接把姓名,年龄,身高这三个String放在keyset里,意义大吗?
更多时候我们是把Person(姓名,年龄,身高)这样的对象放在Set集中.
2楼早已经解答了。虽然说只要用set的地方就能用map来替代实现,你也可以自己基于map实现,jdk这样是为了方便你在有些特定的情况下使用,哪天你用到就知道了。