Set<> Collection<> {size();isEmpty();contains(Object o);Iterator<> iterator();Object[] toArray();<> [] toArray([] a);add(e);remove(Object o);containsAll(Collection<?> c);addAll(Collection<? > c);retainAll(Collection<?> c);removeAll(Collection<?> c);clear();equals(Object o);hashCode();
}

1.HashSet:

  HashSet使用的是相当复杂的方式来存储元素的,使用HashSet能够最快的获取集合中的元素,效率非常高(以空间换时间)。会根据hashcode和equals来庞端是否是同一个对象,如果hashcode一样,并且equals返回true,则是同一个对象,不能重复存放。

package com.set;import java.util.HashSet;
import java.util.Set;class Student{int id;public Student(int id) {this.id = id;}@Overridepublic String toString() {return this.id+"";}@Overridepublic int hashCode() {return this.id;}@Overridepublic boolean equals(Object obj) {if (obj instanceof Student){Student  stu = (Student) obj;if (stu.id == this.id)return true;}return false;}
}
public class HashSetTest {public static void main(String[] args) {Set<Student> set = new HashSet<Student>();Student s1 = new Student(1);Student s2 = new Student(1);Student s3 = new Student(2);set.add(s1);set.add(s2);set.add(s3);for (Student s : set) {System.out.println(s);}}
}

正如上例所示,重写了hashCode()和equals()方法来区分同意对象后,就不能存放同以对象了。如果注释这两个方法,则所有Student对象视为不同对象,都可以存放。

  2.TreeSet

  TreeSet也不能存放重复对象,但是TreeSet会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。排序规则包括自然排序和客户排序。

  ①自然排序:TreeSet要添加哪个对象就在哪个对象类上面实现java.lang.Comparable接口,并且重写comparaTo()方法,返回0则表示是同一个对象,否则为不同对象。

  ②客户排序:建立一个第三方类并实现java.util.Comparator接口。并重写方法。定义集合形式为TreeSet ts = new TreeSet(new 第三方类());

package com.set;import java.util.Set;
import java.util.TreeSet;class Student1 implements Comparable<Student1>{int id;public Student1(int id) {this.id = id;}@Overridepublic String toString() {return this.id+"";}@Overridepublic int hashCode() {return this.id;}@Overridepublic boolean equals(Object obj) {if (obj instanceof Student1){Student1  stu = (Student1) obj;if (stu.id == this.id)return true;}return false;}public int compareTo(Student1 o) {return (this.id-o.id);}
}public class TreeSetTest {public static void main(String[] args) {Set<Student1> set = new TreeSet<Student1>();Student1 s1 = new Student1(5);Student1 s2 = new Student1(1);Student1 s3 = new Student1(2);Student1 s4 = new Student1(4);Student1 s5 = new Student1(3);set.add(s1);set.add(s2);set.add(s3);set.add(s4);set.add(s5);for (Student1 s : set) {System.out.println(s);}}}
package com.set;import java.util.Set;
import java.util.TreeSet;class MySort implements java.util.Comparator<Student2>{public int compare(Student2 o1, Student2 o2) {return o2.id-o1.id;}
}
class Student2{int id;public Student2(int id) {this.id = id;}@Overridepublic String toString() {return this.id+"";}@Overridepublic int hashCode() {return this.id;}@Overridepublic boolean equals(Object obj) {if (obj instanceof Student2){Student2  stu = (Student2) obj;if (stu.id == this.id)return true;}return false;}
}
public class TreeSetTest2 {public static void main(String[] args) {Set<Student2> set = new TreeSet<Student2>(new MySort());Student2 s1 = new Student2(5);Student2 s2 = new Student2(1);Student2 s3 = new Student2(2);Student2 s4 = new Student2(4);Student2 s5 = new Student2(3);set.add(s1);set.add(s2);set.add(s3);set.add(s4);set.add(s5);for (Student2 s : set) {System.out.println(s);}}}
package com.set;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;class MySort1 implements java.util.Comparator<Student3>{public int compare(Student3 o1, Student3 o2) {return o2.id-o1.id;}
}
class Student3 implements Comparable<Student3>{int id;public Student3(int id) {this.id = id;}@Overridepublic String toString() {return this.id+"";}public int compareTo(Student3 o) {return (this.id-o.id);}
}public class ListSort {public static void main(String[] args) {List<Student3> list = new ArrayList<Student3>();Student3 s1 = new Student3(5);Student3 s2 = new Student3(1);Student3 s3 = new Student3(2);Student3 s4 = new Student3(4);Student3 s5 = new Student3(3);list.add(s1);list.add(s2);list.add(s3);list.add(s4);list.add(s5);System.out.println(list);//自然排序:Collections.sort(list);System.out.println(list);//客户排序Collections.sort(list, new MySort1());System.out.println(list);}
}

  3.LinkedHashSet

  LinkedHashSet按照插入顺序保存对象,同时还保存了HashSet的查询速度。

对 set 的遍历

1.迭代遍历:

Set<String> set = new HashSet<String>();
Iterator<String> it = set.iterator();
while (it.hasNext()) {String str = it.next();System.out.println(str);
}

2.for循环遍历:

for (String str : set) {System.out.println(str);
}
Set<Object> set = new HashSet<Object>();
for (Object obj: set) {if(obj instanceof Integer){int aa= (Integer)obj;}else if(obj instanceof String){String aa = (String)obj}
}

转载于:https://my.oschina.net/u/2272631/blog/531472

Set E Interface相关推荐

  1. Go 学习笔记(71)— Go 接口 interface (接口定义、接口实现、接口调用、值接收者、指针接收者)

    1. 接口的定义 接口是和调用方的一种约定,它是一个高度抽象的类型,不用和具体的实现细节绑定在一起.接口要做的是定义好约定,告诉调用方自己可以做什么,但不用知道它的内部实现,这和我们见到的具体的类型如 ...

  2. Static interface methods are only supported starting with Android N (--min-api 24): void okhttp3.log

    错误内容如下 Error: Static interface methods are only supported starting with Android N (--min-api 24): vo ...

  3. Go 学习笔记(35)— Go 接口 interface (接口声明、接口初始化、接口方法调用、接口运算、类型断言、类型查询、空接口)

    1. 接口概念 接口是双方约定的一种合作协议.接口实现者不需要关心接口会被怎样使用,调用者也不需要关心接口的实现细节.接口是一种类型,也是一种抽象结构,不会暴露所含数据的格式.类型及结构. 接口内部存 ...

  4. Go 学习笔记(4)— Go 标识符、数据类型之间转换、布尔型、整型、浮点型、interface 类型

    1. 标识符整体分类 Go 标识符整体分类如下图所示: 2. 数据类型分类 Go 语言按类别有以下几种数据类型: 类型 描述 布尔型 布尔型的值只可以是常量 true 或者 false 数字类型 整型 ...

  5. php 类 接口的区别吗,PHP的接口类(interface)和抽象类(abstract)的区别

    /** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候 ...

  6. java interface list_你了解注解内的@interface List么

    Annotation, Multi-valued annotation, nested annotation, 多值注解, 嵌套注解 今天在研究Spring MVC的Validation机制时(这里 ...

  7. TypeScript学习笔记之 接口(Interface)

    在java中,接口是用来定义一些规范,使用这些接口,就必须实现接口中的方法,而且接口中的属性必须是常量. javascript中是没有接口的概念的.所以TypeScript在编译成 JavaScrip ...

  8. 演示:思科IPS在线模式下Inline Interface Mode的响应行为(区别各个防御行为)

    演示:思科IPS在线模式下Inline Interface Mode的响应行为 演示目标:科IPS在线模式下InlineInterface Mode的响应行为. 演示环境:仍然使用图5.16所示的网络 ...

  9. php中的抽象类(abstract class)和接口(interface)

    一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...

  10. interface IEngineControl封装引擎通用操作

    using System; using System.Collections.Generic; using System.Text; using System.Linq; namespace SIAT ...

最新文章

  1. Visual Studio 2013或2015工程属性中包含目录和库目录的添加方法,附加依赖项,相对路径
  2. wxWidgets:wxKeyEvent类用法
  3. java 混码_kotlin java 混合代码 maven 打包实现
  4. 控制计算机价格,本人对电脑不太懂。想十一买台笔记本电脑。价格控制在5000之内。请高手指点一下。谢谢!...
  5. python程序跨平台桌面_Python中的跨平台桌面通知程序
  6. 递归不行就换动态规划(洛谷P1028题题解,Java语言描述)
  7. 算法提高 解二元一次方程组(java)
  8. UWP锁、解屏后无法响应操作
  9. F#基础教程 ref类型
  10. python中文视频教程-鱼C零基础入门 Python中文视频教程
  11. DBI接口和DPI接口的区别
  12. 利用oc门或od门实现线与_OC与OD门.doc
  13. 京瓷1800打印机扫描步骤_京瓷复印机扫描设置方法京瓷复印机扫描到电脑设置...
  14. 软件安全测试是为了什么,一航软件测评有这些见解
  15. 圆弧周长公式_扇形面积和周长计算公式 【关于扇形的所有公式(周长、弧长、半径、圆心角)写得清楚、详细......
  16. 将CF卡移动磁盘标识改为本地磁盘标识的软件
  17. win10系统修改电脑 hosts 地址
  18. 学生信息管理系统-数据结构课程设计
  19. Mac恢复被修改的文档
  20. 方差与偏差的意义与推导过程

热门文章

  1. 数仓业务容错利器:物理细粒度备份恢复技术
  2. nsqlookupd:高性能消息中间件 NSQ 解析
  3. 让你的产品更懂世界:如何提升场景文本识别中的语言模型
  4. 云小课 | 需求任务还未分解,该咋整!项目管理Scrum项目工作分解的心酸谁能知?
  5. 华为云亮相QCon2020深圳站,带你体会大厂的云原生玩法与秘诀
  6. 数仓安全:用Alter default privilege解决共享schema权限
  7. 【华为云技术分享】ARMv8-A存储模型概述(1)
  8. ubuntu16.04 安装cuda9.0+cudnn7.0.5+tensorflow+nvidia-docker配置GPU服务
  9. 设计模式的C语言应用-状态机模式-第二章
  10. 【Python3网络爬虫开发实战】3.3-正则表达式