HashSet 集合
HashSet是不同于ArrayList和LinkList的类,继承的父类是不同的,因此可以实现的功能是不同的。HashSet的官方解释是繁琐的。简单的概括他的特点:1、无序性2、不重复3、无索引。
在了解HashSet前要先了解一个方法hashCode():
hashCode()是jdk根据对象地址或字符串计算出来的int类型的值,用hashCode()方法可以返回这个值,值相同,代表对象是同一个对象,或者变量的指针指向了同一个地址。
我么用一个简单的代码演示
//先创建一个学生类,并写出他的构造函数
class Student{String name;int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}
}
public class HashCodeDemo {public static void main(String[] args) {Student stu_1 = new Student("张三", 18);Student stu_2 = new Student("张三", 18);System.out.println("stu_1哈希码值"+stu_1.hashCode());System.out.println("stu_2哈希码值"+stu_2.hashCode());//equals比较两个对象时比较地址System.out.println(stu_1.equals(stu_2));//String跟据存放的值来返回HashCode()值String s1 = "998";String s2 = "998";System.out.println(s1.hashCode() == s2.hashCode());}
}
当我们创建了两个Student类对象,并且传入同样的值,用equals比较一下会发现返回的值,不一样,使用hashCode()方法返回两个int类型的数值,数值不同代表对象地址就不同。下面我又创建了两个String类型的字符串,给定的值相同,判断hashCode()的值发现一致,说明赋予两个变量一样的值,地址也就一样,或者说指针指向了同一个地址。
一、HashSet集合方法
boolean add(E e) 添加元素 boolean remove(Object o) 从集合中删除指定元素 void clear() 清空集合中的元素 boolean contains(Object o) 判断集合中是否存在数据 boolean isEmpty() 判断集合是否为空 int size() 集合长度
HashSet和ArrayList类同名方法使用方法基本一致,但是HashSet有着自己特别的用法,我们就来试一下用代码看他的特点。
HashSet<String> hs = new HashSet<>();
hs.add("张三丰");
hs.add("张无忌");
hs.add("张翠山");
hs.add("赵敏");
hs.add("赵敏");
hs.add("周芷若");
System.out.println(hs);
输出我们就会发现它在集合中存储的顺序和我们存入的顺序是不同的,说明了他的无序性。我存入了两个"赵敏",但是再集合中只有一个赵敏,所以他是没有重复的
无索引因为它在集合中的顺序是无序的,所以索引也就没有必要了。
HashSet上述的方法与ArrayList的同名方法的使用是一致的,都是创建了类对象,然后用对象调取类中的方法,这里我就不多赘述了。
二、HashSet的遍历
HashSet因为没有索引,它能使用的遍历方法也就很少,最简单的方法是使用增强for循环遍历,也可以使用迭代器和forEach去循环遍历。
//增强for循环遍历
for (String h : hs) {System.out.println(h);}
//forEach循环遍历
hs.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}
});
//迭代器循环遍历
Iterator<String> it = hs.iterator();
while (it.hasNext()){System.out.println(it.next());
}
三、TreeSet
TreeSet是Set下面的一个子孙类,它具有一个排序性的特点,在加入数字后可以自动的从大到小排序,同时也具有无重复的特点。
TreeSet<Integer> ts = new TreeSet<>();ts.add(1);ts.add(8);ts.add(16);ts.add(1);//迭代for (Integer t : ts) {System.out.println(t);}
HashSet 集合相关推荐
- 7.Set集合总结(TreeSet集合和HashSet集合)
一.Set集合 1.Set集合特点 可以去除重复 存取顺序不一致 没有带索引的方法,所以不能使用普通的for循环遍历,也不能通过索引来获取.删除Set集合里面的元素. 2.Set集合中元素的遍历 二. ...
- HashSet集合存储数据的结构(哈希表)
HashSet集合存储数据的结构(哈希表) 什么是哈希表呢? 在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多 ...
- HashSet集合介绍
Set接口 java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行 ...
- [Java基础]HashSet集合概述和特点
HashSet集合概述和特点: 练习代码如下: package HashSetPackage;import java.util.HashSet;public class HashSetDemo {pu ...
- JAVA Set接口和其常用子类HashSet集合
Set接口,它里面的集合,所存储的元素就是不重复的. HashSet集合,采用哈希表结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法. 保证HashSet集合元素的 ...
- 【java笔记】Set接口 (HashSet集合,LinkedSet集合)
Set:不包含重复元素的collection,没有带索引的方法,不能使用for循环变量 实现类: HashSet 哈希表结构(查询速度快),是一个无序的集合 Set<Integer>set ...
- Day17(集合)学习记录(HashSet集合 HashMap集合)
大纲: Day17(集合)学习目标 [学习目标]理解.了解.应用.记忆 通过今天的学习,参训学员能够:(解释的时候说出二级目标的掌握程度) [应用]HashSet集合 [应用]能够独立阐述Set体系的 ...
- java学习--基础知识进阶第七天--HashSet集合、HashMap集合(集合遍历)
今日内容介绍 u HashSet集合 u HashMap集合(集合遍历) 第1章 HashSet集合 1.1 Set接口的特点 Set体系的集合: A:存入集合的顺序和取出集合的顺序不一致 B ...
- 模拟微博用户注册的程序【使用了HashSet集合实现】
1.实验内容 (1)程序编写:编写一个模拟微博用户注册的程序,要求使用HashSet集合实现.假设用户输入用户名.密码.确认密码.生日(输入格式为yyyy-MM-dd为正确).邮箱(包含符号" ...
最新文章
- 【Android Developer】2.Android的第一个Helloworld程序
- Nginx 配置https 自动续期
- 网络编程学习笔记(recv和send函数)
- Mysql 5.5 源码安装
- 互联网1分钟 |1224
- 三维数组设置索引_10-Unity入门学习之C#基础9「数组」
- Siki_Unity_2-5_DOTween动画插件(未学)
- SAP Spartacus npm install 里包含的 postinstall
- pageadmin CMS网站建设教程:站点添加自定义字段
- Intel MKL 多线程设置
- osg指定向量旋转指定角度
- Web.py Cookbook 简体中文版 - 保存上传的文件
- mysql jtds驱动在哪_几个数据库的驱动、连接
- SQL 查询笔记:子查询,分组查询,左连接查询。。。。。
- Adobe Edge Animate --点击元件内部元素使元件其他元素发生改变
- Netty工作笔记0032---零拷贝AIO内容梳理
- 第15节 三个败家子(15)—— 总被死后累
- SQL Server 2008 评估已过期解决方案
- PMP考试多少分算通过?
- 近场动力学python_科学网—近动力学最新上线的文章快报:2018年7月 - 韩非的博文...