Java学习笔记之HashSet集合——2021/03/27

集合

一、java集合概述

1、java集合类存放与java.util包中,是一个用来存放对象的容器。

  • 集合只能存放对象。比如存一个int型数据1放入集合中,其实它是自动转换成Integer类后存入的,java中每一种基本类型都有对应的引用类型
  • 集合存放的是多个对象的引用,对象本身还是放在堆内存中
  • 集合可以存放不同类型,不限数量的数据类型

2、java集合可分为Set、List和Map三种大体系

  1. Set:无序、不可重复的集合
  2. List:有序、可重复的集合
  3. Map:具有映射关系的集合

3、在JDK5之后,增加了泛型 ,java集合可以记住容器中对象的数据类型

二、HashSet

1. HashSet是Set接口的典型实现

大多数时候使用Set集合时都使用这个实现类。大多数时候我们说的set集合就是HashSet

2、 HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能

3、HashSet具有以下特点

1) 不能保证元素的排列顺序
  • 当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值决定该对象在HashSet中的存储位置
  • 比如存放第一个值a,再存放第二个值4.不能保证a一定在集合的第一个位置
    • 存在set集合的哪个位置由这个值的hashCode决定
2) 不可重复
  • 指的是hashCode不相同
  • 如果两个元素的equals()方法返回true,但它们的hashCode()返回值不相等,HashSet将会把他们存储在不同的位置,但依然可以添加成功
  • 一般来说equals和hashCode会同时等或同事不等
3) HashSet不是线程安全的
4) 集合元素可以是null
5)HashSet

在这里插入图片描述

三、HashSet的使用

1.基本方法

添加、删除元素,清空集合

import java.util.HashSet;
import java.util.Set;

public class Test3 {
	public static void main(String[] args) {
		Set set = new HashSet();
		
		//向set中添加元素
		set.add(1);
		set.add("a");
		
		System.out.println(set);
		
		//set中移除元素
		set.remove(1);
		
		System.out.println(set);
		
		//判断在set中一个元素是否存在
		System.out.println(set.contains("a"));
		
		//清空集合
		set.clear();
		System.out.println(set);
	}
}

在这里插入图片描述

2、遍历集合
  1. 迭代器遍历集合
  2. for each迭代集合**(推荐使用)**
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Test3 {
	public static void main(String[] args) {
		Set set = new HashSet();
		
		set.add("a");
		set.add("b");
		set.add("c");
		set.add("d");
		System.out.println(set);
		
		//1.使用迭代器遍历集合
		Iterator it = set.iterator();
		
		while(it.hasNext()) {
			System.out.println(it.next());
		}
		
		
		//2.for each迭代集合
		for(Object obj : set) {//这个的意思是把set的每一个值取出来,赋值给obj,直到循环set的所有值
			System.out.println(obj);
		}
	}
}

在这里插入图片描述

3、获取集合的元素个数
set.size();
4、set集合存的值不重复,且可以存放null
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Test3 {
	public static void main(String[] args) {
		Set set = new HashSet();
		
		set.add("a");
		set.add("b");
		set.add("c");
		set.add("d");
		set.add("d");//set集合存的值是不重复的
		
		set.add(null);
		
		System.out.println(set);
		
		//1.使用迭代器遍历集合
		Iterator it = set.iterator();
		
		while(it.hasNext()) {
			System.out.println(it.next());
		}
		
		
		//2.for each迭代集合
		for(Object obj : set) {//这个的意思是把set的每一个值取出来,赋值给obj,直到循环set的所有值
			System.out.println(obj);
		}
		
		System.out.println(set.size());
	}
}

在这里插入图片描述
存放的null却在第一个输出,说明set集合不保证元素的排列顺序

四、hashCode()方法

1、HashSet集合判断两个元素相等的标准

两个对象通过equals()方法比较相等,且两个对象的hashCode()方法返回值也相等

2、如果两个对象通过equals方法返回true,这两个对象的hashCode值也应该相同

五、泛型

set中可以存放不同类型的对象。
如果想要让集合只能存放同样类型的对象,怎么做?

  • 使用泛型
import java.util.HashSet;
import java.util.Set;

public class Test3 {
	public static void main(String[] args) {
		
		//Set set = new HashSet();等价于
		Set<Object> set = new HashSet<Object>();
		
		//比如指定String为集合的泛型,那么这个集合就不能存放String类型之外的变量
		Set<String> set1 = new HashSet<String>();
		
		set1.add("abc");
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值