1、Set接口介绍

  (1)Collection中可以存放重复元素,也可以不存放重复元素,那么我们知道List中是可以存放重复元素的。那么不重复元素给哪里存放呢?那就是Set接口,它里面的集合,所存储的元素就是不重复的;

  (2)查阅Set集合的API介绍,通过元素的equals方法,来判断是否为重复元素。

2、HashSet集合介绍

  (1)此类实现Set接口,由哈希表支持(实际上是一个 HashMap集合)。HashSet集合不能保证的迭代顺序与元素存储顺序相同;

  (2)HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法。

3、HashSet集合存储数据的结构(哈希表)

  保证HashSet集合元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。

4、HashSet存储JavaAPI中的类型元素

  (1)给HashSet中存储JavaAPI中提供的类型元素时,不需要重写元素的hashCode和equals方法,因为这两个方法,在JavaAPI的每个类中已经重写完毕,如String类、Integer类等;

  (2)创建HashSet集合,存储String对象。

  1. public class HashSetDemo {
  2. public static void main(String[] args) {
  3. //创建HashSet对象
  4. HashSet<String> hs = new HashSet<String>();
  5. //给集合中添加自定义对象
  6. hs.add("zhangsan");
  7. hs.add("lisi");
  8. hs.add("wangwu");
  9. hs.add("zhangsan");
  10. //取出集合中的每个元素
  11. Iterator<String> it = hs.iterator();
  12. while(it.hasNext()){
  13. String s = it.next();
  14. System.out.println(s);
  15. }
  16. }
  17. }

(3)输出结果如下,说明集合中不能存储重复元素

  1. wangwu
  2. lisi
  3. zhangsan

5、HashSet存储自定义类型元素

  (1)给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一;

  (2)创建自定义对象Student

  1. public class Student {
  2. private String name;
  3. private int age;
  4. public Student(String name, int age) {
  5. super();
  6. this.name = name;
  7. this.age = age;
  8. }
  9. public String getName() {
  10. return name;
  11. }
  12. public void setName(String name) {
  13. this.name = name;
  14. }
  15. public int getAge() {
  16. return age;
  17. }
  18. public void setAge(int age) {
  19. this.age = age;
  20. }
  21. @Override
  22. public String toString() {
  23. return "Student [name=" + name + ", age=" + age + "]";
  24. }
  25. @Override
  26. public int hashCode() {
  27. final int prime = 31;
  28. int result = 1;
  29. result = prime * result + age;
  30. result = prime * result + ((name == null) ? 0 : name.hashCode());
  31. return result;
  32. }
  33. @Override
  34. public boolean equals(Object obj) {
  35. if (this == obj)
  36. return true;
  37. if(!(obj instanceof Student)){
  38. System.out.println("类型错误");
  39. return false;
  40. }
  41. Student other = (Student) obj;
  42. return this.age == other.age && this.name.equals(other.name);
  43. }
  44. }

  (3)创建HashSet集合,存储Student对象

  1. public class HashSetDemo {
  2. public static void main(String[] args) {
  3. //创建HashSet对象
  4. HashSet hs = new HashSet();
  5. //给集合中添加自定义对象
  6. hs.add(new Student("zhangsan",21));
  7. hs.add(new Student("lisi",22));
  8. hs.add(new Student("wangwu",23));
  9. hs.add(new Student("zhangsan",21));
  10. //取出集合中的每个元素
  11. Iterator it = hs.iterator();
  12. while(it.hasNext()){
  13. Student s = (Student)it.next();
  14. System.out.println(s);
  15. }
  16. }
  17. }

  (4)输出结果如下,说明集合中不能存储重复元素

  1. Student [name=lisi, age=22]
  2. Student [name=zhangsan, age=21]
  3. Student [name=wangwu, age=23]

6、LinkedHashSet介绍

  (1)我们知道HashSet保证元素唯一,可是元素存放进去是没有顺序的,那么我们要保证有序,怎么办呢?

  (2)在HashSet下面有一个子类LinkedHashSet,它是链表和哈希表组合的一个数据存储结构;

  (3)演示代码如下:

  1. public class LinkedHashSetDemo {
  2. public static void main(String[] args) {
  3. Set<String> set = new LinkedHashSet<String>();
  4. set.add("bbb");
  5. set.add("aaa");
  6. set.add("abc");
  7. set.add("bbc");
  8.      Iterator it = set.iterator();
  9. while (it.hasNext()) {
  10. System.out.println(it.next());
  11. }
  12. }
  13. }

  (4)输出结果如下,说明LinkedHashSet集合保证元素的存入和取出的顺序

  1. bbb
  2. aaa
  3. abc
  4. bbc

00082_Set接口的更多相关文章

  1. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  2. 干货来袭-整套完整安全的API接口解决方案

    在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...

  3. 12306官方火车票Api接口

    2017,现在已进入春运期间,真的是一票难求,深有体会.各种购票抢票软件应运而生,也有购买加速包提高抢票几率,可以理解为变相的黄牛.对于技术人员,虽然写一个抢票软件还是比较难的,但是还是简单看看123 ...

  4. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  5. Java基础Map接口+Collections

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  6. java基础_集合List与Set接口

    List接口继承了Collection的方法  当然也有自己特有的方法向指定位置添加元素   add(索引,添加的元素); 移除指定索引的元素   remove(索引) 修改指定索引的元素   set ...

  7. 【WCF】自定义错误处理(IErrorHandler接口的用法)

    当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端.在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1.Action:在服务调 ...

  8. PHP以接口方式实现多重继承(完全模拟)--学习笔记

     1.UML类图: 2.PHP代码: <?php /** * Created by PhpStorm. * User: andy * Date: 16-11-23 * Time: 下午7:57 ...

  9. 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo

    Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...

随机推荐

  1. yii2.0缓存篇之文件缓存

    文件缓存: 在 frontend/config/main.php/components数组下添加: 'cache'=>[      'class'=>'yii\caching\FileCa ...

  2. bzoj2100 [Usaco2010 DEC]Apple Delivery苹果贸易

    题目描述 一张P个点的无向图,C条正权路.CLJ要从Pb点(家)出发,既要去Pa1点NOI赛场拿金牌,也要去Pa2点CMO赛场拿金牌.(途中不必回家)可以先去NOI,也可以先去CMO.当然神犇CLJ肯 ...

  3. 使用Java8提供的Duration类制作字幕时间轴调整工具

    网上下载的字幕有时和片源的时间轴不一致.我们能够自己写一个工具来调整,也就是总体向前移动几秒,或者向后移动几秒.Java8中提供的Duration类使得这样的时间计算极其方便.以下就以最简单的srt字 ...

  4. ios系统提示音的使用(不是铃声)

    AudioServices Jump to: navigation, search AudioServices is a group of C functions in AudioToolbox fo ...

  5. caioj1443:第k小的数Ⅲ

    [传送门:caioj1443] 简要题意: 给出一颗n个点的树,给出每个点的权值,再给出n-1条边,有m个询问,每个询问输入x,y,k,输出第x节点到第y节点的路径上第k大的点 题解: 这是一道主席树 ...

  6. sc命令以及InstallUtil安装service

    1.安装 https://stackoverflow.com/questions/8164859/install-a-windows-service-using-a-windows-command-p ...

  7. BZOJ 3781 莫队

    思路:不能再裸的裸题-- //By SiriusRen #include <cmath> #include <cstdio> #include <algorithm> ...

  8. spring 中国下载点

    http://repo.spring.io/libs-release-local/org/springframework/spring/ spring 中国下载点

  9. Inter-process Communication (IPC)

    For Developers‎ > ‎Design Documents‎ > ‎ Inter-process Communication (IPC) 目录 1 Overview 1.1 I ...

  10. 如何在Ubuntu14.04中安装mysql

    接触过MySQL的小伙伴们都知道,在Windows下安装MySQL是一件让人十分头大的事情,但是在Ubuntu等其他Linux系统中安装MySQL就简单很多了,具体的教程如下.1.在Ubuntu的命令 ...