`
blusky
  • 浏览: 23836 次
  • 性别: Icon_minigender_1
  • 来自: 福建福州
最近访客 更多访客>>
社区版块
存档分类
最新评论

http://caterpillar.onlyfun.net/GossipCN/JavaGossip

    博客分类:
  • Java
阅读更多

HashSet实作Set介面,Set介面继承Collection介面,Set容器中的物件都是唯一的,加入 Set容器中的物件都必须重新定义equals()方法,作为唯一性的识别,Set容器有自己的一套排序规则。

HashSet的排序规则是利用Hash Table,所以加入HashSet容器的物件还必须重新定义hashCode()方法,利用Hash的方式,可以让您快速的找到容器中的物件,在比较两个加入Set容器中的物件是否相同时,会先比较hashCode()方法传回的值是否相同,如果相同,则再使用equals()方法比较,如果两者都相同,则视为相同的物件。

事实上,在撰写新的类别时,最好总是重新定义equals()与hashCode()方法,以符合Java的设计规范,您可以参考
Object 类别 中的介绍了解如何重新定义equals()与hashCode()。

来看一个例子:

  • HashSetDemo.java
package onlyfun.caterpillar;
 
import java.util.*;
 
public class HashSetDemo {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>();
        
        set.add("caterpillar");
        set.add("justin");
        set.add("momor");
        set.add("justin");
        
        Iterator iterator = set.iterator();
        while(iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }
        
        System.out.println(); 
    }
} 


执行结果:

 momor justin caterpillar


如上所示的,即使重覆加入了"justin"字串,HashSet中仍只有一个"justin"字串物件,另一个要注意的是,选代所有的值时,其顺序与您加入的顺序是不一样的,选代所有值时的顺序是HashSet排序过后的顺序。

LinkedHashSet是HashSet的子类,它在内部实作使用Hash Code进行排序,然而允许您在列举时行为像是LinkedList,简单的改写上面的程式即可了解:

  • LinkedHashSetDemo.java
package onlyfun.caterpillar;
 
import java.util.*;
 
public class LinkedHashSetDemo {
    public static void main(String[] args) {
        Set<String> set = new LinkedHashSet<String>();
        
        set.add("caterpillar");
        set.add("justin");
        set.add("momor");
        set.add("justin");
        
        Iterator iterator = set.iterator();
        while(iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }
        
        System.out.println();
    }
}


执行结果:

 caterpillar justin momor


可以在执行结果中看到的,选代时的顺序正是您加入值的顺序。

分享到:
评论

相关推荐

    Java 学习笔记-手机书 Rev.1 (080408)

    此份所有内容皆出自我的偶像:林信良(良葛格)的Java 学习笔记,网址: http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/JavaGossip.htm&lt;br&gt;本人只是将其整理成适合手机阅读的格式。 此为第一版Java ...

    Java 学习笔记-手机书 Rev.3 (080603)

    此份所有内容皆出自我的偶像:林信良(良葛格)的Java 学习笔记,网址: http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/JavaGossip.htm&lt;br&gt;本人只是将其整理成适合手机阅读的格式。 &lt;br&gt;此为第三...

    Java 学习笔记-手机书 Rev.2 (080411)

    此份所有内容皆出自我的偶像:林信良(良葛格)的Java 学习笔记,网址: http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/JavaGossip.htm&lt;br&gt;本人只是将其整理成适合手机阅读的格式。 &lt;br&gt;此为第二...

    dwr-1.13.jar及dwr.xml

    dwr-1.1.3.jar及dwr.xml.&lt;br/&gt;dwr-1.1.3与dwr-2.0的dwr.xml略有区别:&lt;br/&gt;dwr-1.1.3&lt;br/&gt;&lt;!...http://blog.csdn.net/caterpillar_here/archive/2006/09.aspx http://wiki.javascud.org/display/dwrcn/Home

    幼儿园教案2021-大班英语教案:The very hungry caterpillar.doc

    本资源摘要信息是基于幼儿园教案2021-大班英语教案:The very hungry caterpillar.doc,旨在设计一份英语教案,帮助大班幼儿学习英语语言和相关的文化知识。 活动名称:The very hungry caterpillar 活动目标: 1...

    大班英语教案:The very hungry caterpillar.doc

    大班英语教案:The Very Hungry Caterpillar 本教案旨在通过故事《The Very Hungry Caterpillar》的讲解,帮助幼儿学习英文食物名称,发展语言能力和听说能力,同时培养幼儿的动手能力和团队协作精神。 活动目标 ...

    大班英语教案:The very hungry caterpillar.docx

    大班英语教案:The Very Hungry Caterpillar 基于提供的文件信息,我们可以总结出以下知识点: 1. 教学目标: 本教案的目标是让学生能够正确地用英文表述故事中的食物名称,安静倾听理解故事内容,初步学会说故事...

    caterpillar

    该软件能够对文本查询进行预处理,制作unicode文本文件的全文二级索引。有中文,英文,德文三种语言的文本例子。文本内容可以换成自己需要的,字典可以根据需要...资源网址:http://code.google.com/p/caterpillars/

    DWR入门与应用

    这里指定了一个名为`Hello`的JavaScript对象,对应于Java中的`onlyfun.caterpillar.Hello`类。这样客户端就可以通过调用`Hello`对象的方法来与服务器端交互了。 #### 三、客户端JavaScript代码 最后,我们需要编写...

    GTK学习教程

    这是一位台湾朋友写的,这是他的网站 http://caterpillar.onlyfun.net/Gossip/GTKGossip/GTKGossip.html 祝大家学习开心啊。能更好的使用的C语言。

    林信良JAVA学习笔记

    作者:林信良(网络化名良葛格) 学历:台湾大学电机工程学系 经历:SUN教育训练中心讲师 ...博客: http://blog.csdn.net/caterpillar_here 详细信息: http://www.china-pub.com/computers/common/info.asp?id=31664

    《良葛格Java JDK 5.0学习笔记》.rar

    Java JDK 5.0学习笔记 1至6章及附录A和附录B 包含java特性、java学习方法、网络资源汇总、jdk下载和安装、path与CLASSPATH的设置、java基本语法、关于对象的认识、数组...博客: http://blog.csdn.net/caterpillar_here

    JDBC入門,如何实现Java与数据库的连接

    Class.forName(props.getProperty("onlyfun.caterpillar.driver")); } @Override public Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, passwd); } @...

    caterpillar:哈希目录树,以供以后验证

    boa:~/repos/caterpillar(primaria)$ ./caterpillar hash ./hash/ 514c1ea7456b11c1bc8a89927206602b hash/file.go 4b7d6cd1868de6b8adf5960fa569f718 hash/hash.go 12b2a2e47897141494342b2fe6a37d3f hash/tree.go...

    良葛格Java 学习笔记

    学习java非常好的书,作者:林信良(网络化名良葛格) 学历:台湾大学电机工程学系 经历:SUN教育训练中心讲师 著作:《JAVA 学习笔记》、《Spring 技术手册》,为SUN...博客: http://blog.csdn.net/caterpillar_here

    Python库 | caterpillar_mail-1.0.4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:caterpillar_mail-1.0.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    DWR 入門與應用-林信良

    这里`creator="new"`表示使用无参数构造器创建`Hello`对象,`javascript="Hello"`则指定了客户端JavaScript将使用`Hello`来调用`onlyfun.caterpillar.Hello`。 最后,你需要在HTML页面中引入DWR生成的JavaScript...

    spring-Acgei的一个小例子之一

    &lt;security:protect method="onlyfun.caterpillar.ISome#doSupervisor()" access="hasRole('ROLE_SUPERVISOR')"/&gt; &lt;/security:method-security-metadata-source&gt; &lt;/property&gt; ...

Global site tag (gtag.js) - Google Analytics