目录

Java - Set接口:

- HashSet集合:

- P.S.Set 集合不允许出现重复元素的原理

- HashSet存储自定义类型元素

- LinkedHashSet集合


Java - Set接口:

* java.util.Set接口 extends Collection接口
* Set接口的特点:
*       1.不允许存储重复的元素
*       2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历

HashSet集合:

* java.util.HashSet集合 implements Set接口
* HashSet特点:
*       1.不允许存储重复的元素
*       2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
*       3.是一个无序的集合,存储元素和取出元素的顺序有可能不一致
*       4.底层是一个哈希表结构(查询速度非常快)
import java.util.*;public class Main {public static void main(String[] args) {Set<Integer> set = new HashSet<>();//使用add 方法往集合中添加元素set.add(1);set.add(3);set.add(2);set.add(1);System.out.println(set);//使用迭代器遍历set集合Iterator<Integer> it = set.iterator();while(it.hasNext()){Integer x = it.next();System.out.println(x);}System.out.println("-------------");//使用增强for遍历set集合for(Integer i : set){System.out.println(i);}}
}
//HashSet 集合内,元素唯一有序排列

P.S.Set 集合不允许出现重复元素的原理

* 哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址
*        是模拟出来得到地址,不是数据实际存储的物理地址),在Object类有一个方法
*        可以获取对象的哈希值。
*        int hashCode()
*           返回该对象的哈希码值
* Set 集合不允许出现重复元素的原理
* Set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法,判断元素是否重复
* 如果没有哈希冲突,则把元素加入集合,如果由哈希冲突,调用equals方法,若返回true
* 认定两个元素相同,就不会把元素加入集合;若返回false则认定两个元素不同,把元素加入集合。

HashSet存储自定义类型元素

import java.util.*;
/*
* HashSet存储自定义类型元素
* set集合报错元素唯一:
*       存储的元素(String, Integer,...Student, Person...)必须重写hashCode方法和equals方法
* 要求:
*       同名同年龄的人,视为同一个人,只能存储一次
*/
public class Main {public static void main(String[] args) {//创建HashSet集合存储PersonHashSet<Person> set = new HashSet<>();Person p1 = new Person("迪丽热巴", 18);Person p2 = new Person("迪丽热巴", 18);Person p3 = new Person("迪丽热巴", 19);set.add(p1);set.add(p2);set.add(p3);System.out.println(set);//[Person{name='迪丽热巴', age=19}, Person{name='迪丽热巴', age=18}, Person{name='迪丽热巴', age=18}]System.out.println(p1.hashCode());//460141958System.out.println(p2.hashCode());//1163157884System.out.println(p1 == p2); // falseSystem.out.println(p1.equals(p2));//false}
}//以下为定义的 Person 类,注意必须重写hashCode方法和equals方法
import java.util.Objects;public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public Person(){}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age &&Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}

LinkedHashSet集合

链表实现的HashSet,集合内 的顺序与输入顺序相同

import java.util.*;
/*
* java.util.LinkedHashSet集合 extends HashSet集合
* LinkedHashSet集合特点:
*       底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序
*
*/
public class Main {public static void main(String[] args) {HashSet<String> set = new HashSet<>();set.add("www");set.add("abc");set.add("abc");set.add("itcast");System.out.println(set);//[abc, www, itcast]无序,不允许重复LinkedHashSet<String> linked = new LinkedHashSet<>();linked.add("www");linked.add("abc");linked.add("abc");linked.add("itcast");System.out.println(linked);//[www, abc, itcast]有序,不允许重复}
}

Java - Set 接口相关推荐

  1. java 清空控制台_利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用

    在H2数据库引擎中获取代码执行权限的技术早已是众所周知,但有个要求就是H2能够动态编译Java代码.而本文将向大家展示以前没有公开过的利用H2的方法,并且无需使用Java编译器,即通过原生库和JNI( ...

  2. java多线程查询_利用Java函数式接口处理多线程查询

    Java函数式接口 有且只有一个抽象方法的接口被称为函数式接口. @FunctionalInterface注解: 该注解可用于一个接口的定义上, 一旦使用该注解来定义接口, 编译器将会强制检查该接口是 ...

  3. java滥用接口_吐槽一下项目中的代码坏味道:滥用java常量

    我们的项目中是否充斥着类似以下的代码呢?定义一个专门存放常量的java类(接口),非常多其它类依赖该常量类. public interface IConstant { int ZERO = 0; St ...

  4. java接口与类相同不同_浅谈java的接口和C++虚类的相同和不同之处

    C++虚类相当于java中的抽象类,与接口的不同之处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方 ...

  5. java类接口的区别_【Java基础】java接口和类的区别-瑶瑶吖的回答

    基本语法区别 Java中接口和抽象类的定义语法分别为interface与abstract关键字. 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为 ...

  6. java 实现接口后重写方法报错

    java 实现接口后重写方法报错 java 实现接口后重写方法报错 The method contextDestroyed(ServletContextEvent) of type InitListe ...

  7. Java 利用接口实现回调

    在 Java 支持方法指针之前,Java 接口不能提供一种实现回调的好方法.如果您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧.  熟悉 MS-Windows 和 X Window ...

  8. java一个接口执行结束释放内存_java的灵魂--JVM虚拟机

    JVM是运行在操作系统之上的,它与硬件没有直接的交互 JVM体系结构 1.类加载器 负责加载class文件,class文件在文件开头有特定的文件标示, 并且ClassLoader只负责class文件的 ...

  9. java private 接口_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  10. 《Java程序设计》实验报告——Java的接口与继承

    浙江理工大学 <Java程序设计>  实验报告  20 19-20 20学年第 1学期      学  院 信息学院 班  级 计算机科学与技术18(3) 姓  名 申屠志刚 学  号 2 ...

最新文章

  1. 几种机器学习算法的偏差以及防范
  2. 【数据结构-查找】1.通俗易懂讲解 —— 顺序-折半-分块查找
  3. 强势崛起的Python会在十年内取代Java吗?
  4. jdk 1.8 java.policy,JDK1.8 导致系统报错:java.security.InvalidKeyException:illegal Key Size
  5. 推荐一个在线图片处理神奇,图片处理绝大多数需求,都能在浏览器里搞定
  6. java 死锁种类_用java写一个死锁
  7. 地球上这10个奇幻景观,带你踏入外太空
  8. 使用css3属性transition实现页面滚动
  9. python的模块导入问题_python导入模块错误怎么解决
  10. android plugin 镜像,cordova-plugin-screen-orientation
  11. Django框架——状态保持(cookie、session)
  12. winform中DataGridview数据绑定时格式化文本,如:将部分文字改成绿色,部分文字改成红色...
  13. Linux内核绑定1号cpu,Linux绑定硬件IRQ到指定CPU核
  14. 任务栏流量监测工具 NetSpeedMonitor 在Windows 8下的安装使用
  15. python制作ppt动画_卧槽,还能这么玩!用Python生成动态PPT
  16. 带隙基准电压-Bandgap详细介绍
  17. iOS 系统视频播放器简单介绍
  18. 笔记本损耗60 计算机提示,笔记本电脑电池损耗,详细教您笔记本电脑电池损耗怎么修复...
  19. 汇编实现吃豆子小程序
  20. VMware Workstation Pro 虚拟机搭建

热门文章

  1. 【OBS-STUDIO】OBSApp: OBS入口类
  2. Assembly 调用的目标发生了异常
  3. Hack The Box - Starting Point - TIER 0
  4. Last Corollary CodeForces - 1364D(dfs树找最小环)
  5. git-如何将本地分支与远程分支关联
  6. 无人驾驶汽车系统入门(二十三)——迁移学习和端到端无人驾驶
  7. JavaScript 学习笔记(八)前后端交互;Ajax进行前后端交互
  8. Nodejs卸载、安装及环境配置
  9. Linux sftp命令
  10. CentOS命令汇总