set接口

  java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方 法基本一致,但是set接口中元素无序,并且不重复

  分类

    1.HashSet集合

    2.LinkedHashSet集合

HashSet集合:

  java.util.HashSet 是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序 不一致)

 package demosummary.set;

 import java.util.HashSet;

 public class HashSetTest01 {
public static void main(String[] args) {
//创建set集合
HashSet<String> set = new HashSet<>();
//添加元素
set.add("德玛");
set.add("德邦");
set.add("皇子");
set.add("剑圣");
set.add("德玛");
System.out.println(set);//[德邦, 皇子, 德玛, 剑圣]//元素不允许重复,且无序
//遍历集合
for (String s : set) {
System.out.println(s);
}
}
}

  HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性 的方式依赖于: hashCode 与 equals 方法

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

  哈希表是由数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,如下图所示

  

  

HashSet存储自定义类型元素

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

 package demosummary.set;

 import java.util.Objects;

 public class SetPerson {
private String name;
private int age; public SetPerson() {
} public SetPerson(String name, int age) {
this.name = name;
this.age = age;
} 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;
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SetPerson setPerson = (SetPerson) o;
return age == setPerson.age &&
Objects.equals(name, setPerson.name);
} @Override
public int hashCode() {
return Objects.hash(name, age);
} @Override
public String toString() {
return "SetPerson{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
 package demosummary.set;

 import java.util.HashSet;

 public class SetPersonTest {
public static void main(String[] args) {
//创建set集合
HashSet<SetPerson> sp = new HashSet<>();
//添加元素
SetPerson setPerson = new SetPerson("德玛",18);
sp.add(setPerson);
sp.add(new SetPerson("德邦", 19));
sp.add(new SetPerson("皇子", 20));
sp.add(new SetPerson("剑圣", 19));
//遍历set集合
for (SetPerson person : sp) {
System.out.println(person);
}
/**
* 执行结果
* SetPerson{name='皇子', age=20}
* SetPerson{name='德玛', age=18}
* SetPerson{name='德邦', age=19}
* SetPerson{name='剑圣', age=19}
*/
}
}

LinkedHashSet

  HashSet的一个子类 java.util.LinkedHashSet ,它是链表和哈希表组合的一个数据存储结构,保证取出元素是有序的

 package demosummary.set;

         import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList; public class LinkedHashSetTest01 {
public static void main(String[] args) {
//创建LinkedList集合
LinkedHashSet<String> set = new LinkedHashSet<>();
//添加元素
set.add("剑圣");
set.add("德玛");
set.add("皇子");
set.add("德邦");
//迭代器输出结果
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
/**
* 输出结果
* 剑圣
* 德玛
* 皇子
* 德邦
*/
}
}

可变参数

  如果我们定义一个方法需要接受多个参数,并且多个参数类型一致,我们可以对其简化成如下格 式:

  修饰符 返回值类型 方法名(参数类型... 形参名){  }

  等价于

  修饰符 返回值类型 方法名(参数类型[] 形参名){  }

 package demosummary.set;

 public class SetTest {
public static void main(String[] args) {
//定义一个数组
int[] arr = {1,5,8,66,88,345};
//定义一个结果并赋值
int sum = getSum(arr);//调用方法并给sum赋值
//输出结果
System.out.println(sum);
} /**
* 完成数组  所有元素的求和 原始写法
* public static int getSum(int[] arr){
* int sum = 0;
* for(int a : arr){
* sum += a;
* }
* return sum;
* }
*/
//可变参数写法
public static int getSum(int[] arr){
//定义一个sum参数
int sum = 0;
//增强for
for (int i : arr) {
//得出结果
sum += i;
}
//返回结果
return sum;
}
}

Java之路---Day19(set接口)的更多相关文章

  1. Python之路,Day19 - CMDB、CMDB、CMDB

    Python之路,Day19 - CMDB.CMDB.CMDB   本节内容 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT ...

  2. Java之路——名词解释(一)

    一.开篇 许多人在初接触Java的时候,都会被各种Java的英文缩写名词给弄得头晕脑胀.看一个技术,内容里又会有一堆其他的技术名词,看了半天不知所云.尝试去查一下这些名词的解释,除了非常学术性的解释之 ...

  3. Java之路——敬JAVA初学者(作者:MoMo)

    作为一名大四的毕业生,大学三年过,有得有失.作为一个喜欢编程,喜欢JAVA的人,自学其实是一件美事,很有意思的事.要是能再找个女朋友一起学.嘿嘿,就不枉在大学走了一遭啊!    要离开学校了,还是想留 ...

  4. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  5. java 中的2个接口 Comparable和Comparator

    像Integer.String这些类型的数据都是已经实现Comparable接口的,所以对这些类型可以直接通过Arrays.sort(...)和Collections.sort(...)方法进行排序. ...

  6. Java集合框架之Collection接口

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...

  7. Java集合框架中List接口的简单使用

    Java集合框架可以简单的理解为一种放置对象的容器,和数学中的集合概念类似,Java中的集合可以存放一系列对象的引用,也可以看做是数组的提升,Java集合类是一种工具类,只有相同类型的对象引用才可以放 ...

  8. 黑马程序员——JAVA基础之抽象和接口 , 模版方法设计模式

    ------- android培训.java培训.期待与您交流! ---------- 抽象定义:           抽象就是从多个事物中将共性的,本质的内容抽取出来.           例如:狼 ...

  9. JAVA的核心概念:接口(interface)

    JAVA的核心概念:接口(interface) 接口与类属于同一层次,实际上,接口是一种特殊的抽象类. 如:    interface IA{ }  public interface: 公开接口  与 ...

随机推荐

  1. activiti 工作流动态设置指定节点任务人、责任人、组的实现方式

    首先给大家看一下我的流程图: 流程文件leaveBill.bpmn <?xml version="1.0" encoding="UTF-8"?>&l ...

  2. 借助模板类自动实现COM连接点接收器(Sink)

    本文的更新:借助模板类自动实现COM连接点接收器(Sink)更新 (2014-06-09 17:09) 最初的代码源自free2000fly的一个标准的 COM 连接点接收器(Sink)的实现, 使用 ...

  3. java.sql.SQLException: Access denied for user 'xxx'@'localhost' (using password: YES)

    java.sql.SQLException: Access denied for user 'xxx'@'localhost' (using password: YES) at com.mysql.c ...

  4. Codeforces Round #609 (Div. 2) A到C题

    签到,乘以两个相邻的合数 #include<bits/stdc++.h> using namespace std; int main(int argc, char const *argv[ ...

  5. CSP 201903-2 24点

    这是上一次考csp时遇到的一道简单的问题,但是当时太菜了没有写出来. 问题描述: 直接上图 解决思路: 标准的表达式求解,可以用符号栈和数值栈来存放运算符和数值,需要注意的是从左到右扫描的时候 遇到 ...

  6. Linux—— 记录所有登陆用户的历史操作记录

    前言 记录相应的人登陆服务器后,做了那些操作,这个不是我自己写的,因为时间久了,原作者连接也无法提供,尴尬. 步骤 history是查询当前连接所操作的命令,通过编写以下内容添加至/etc/profi ...

  7. echarts x轴标签文字过多导致显示不全

    原文电梯:https://blog.csdn.net/kebi007/article/details/68488694 echarts x轴标签文字过多导致显示不全 如图: 解决办法1:xAxis.a ...

  8. React 积累

    1. Fragment 标签 使用介绍:因React要求每个组件都需要一个大的外层包裹起来才可以,否则报错,如果你并不想组件外层由一个大大外层包裹,则可以使用Fragment 标签 代码示例: imp ...

  9. 第08组 Beta冲刺(4/5)

    队名:955 组长博客:点这里! 作业博客:点这里! 组员情况 组员1(组长):庄锡荣 过去两天完成了哪些任务 文字/口头描述 ? 测试新功能中 展示GitHub当日代码/文档签入记录 接下来的计划 ...

  10. GEO2R

    GEO2R 是GEO数据库官方提供的一个工具,用于进行差异表达分析. 该工具实现的功能就是将GEO数据库中的数据导入到R语言中,然后进行差异分析,本质是通过以下两个bioconductor上的R包实现 ...