如题,Java集合类中为什么没有顺序Set,像ArrayList一样的,而是直接HashSet呢?
相比ArrayList,HashSet不允许有重复对象(对过equals判断),可是为什么没有ArraySet啊?为什么Set只有一中哈希实现(查找更快一点),二没有顺序实现呢?SUN是怎么考虑的?小弟愚笨,提这么一个问题,希望高手解释啊!
相比ArrayList,HashSet不允许有重复对象(对过equals判断),可是为什么没有ArraySet啊?为什么Set只有一中哈希实现(查找更快一点),二没有顺序实现呢?SUN是怎么考虑的?小弟愚笨,提这么一个问题,希望高手解释啊!
解决方案 »
- 新手上路 问个Object类 clone() 的问题
- java写的小程序如何打包成可执行文件?
- 这三中声明方式有什么区别吗?
- 关于 import netscape.javascript.jsobject的问题
- 如何通过JAVA得到本机的进程以及磁盘信息?
- 请教一个关于replace字符串的问题
- 关于“ Connection reset by peer: socket write error”错误
- sourceforge.net上不去,怎么办?
- 请教JAVA高手一个JBUILDER中关于GUI设计的一个问题::有分赠送
- The Class XXX can not be instantiated是什么东东,怎么解决?
- 请问两个matlab接收和返回java传送数据的接口
- 请帮我改一下这个程序
public TreeSet()构造一个新的空 set,该 set 按照元素的自然顺序排序。插入该 set 的所有元素都必须实现 Comparable 接口。而且,所有此类元素必须是可相互比较的:为 set 中的任何元素 e1 和 e2 执行 e1.compareTo(e2) 时必须不抛出 ClassCastException。如果用户尝试将违背此约束的元素添加到 set 中(例如,用户试图将字符串元素添加到其元素为整数的 set 中),则 add(Object) 调用将抛出 ClassCastException。
set不是无序不重复的么`
由Resizable Array实现的顺序性存储set诸如ArraySet等就没有存在的必要了
Set与List的显著区别是Set中的元素是不重复的。
因为List中的元素存在相等的情况,所以,我们无法多List进行严格排序(实际上,相等的元素无法决定哪个元素在前,哪个元素在后)。
因为Set中的元素一定是不相同的,所以,是可以进行严格排序的,其中TreeSet就是一个已排序的SortedSet实现类。至于无序和不重复,应该指的是HashSet。
楼主有兴趣,应该去学一下数据结构,这样,就会对Java提供的几个集合的实现类有所深刻的了解了。不是没有ArraySet这种集合类,而是JDK没有提供这样的实现类,为什么没提供,是因为,它没有太大的适用场景。我们在适用这些实现类的时候,是要根据实际的场景来选择的,当场景特殊到JDK所提供的实现类无法满足的时候,是要我们自己来编写和扩展功能代码的。List强调的是元素的先后顺序。Set强调的是快速的查找Set中已经存在的元素。举个例子,我现在有一个手机号码的txt文件,一行一个号码,一共2万多个号码,现在,要求去掉这些号码中重复的号码,生成新的文件,速度要快。
毫无疑问,用Set的速度要比List快。(HashSet有可能会比TreeSet快)