Java学习day27-HashSet集合
一、Java集合概述
1.Java集合类存放于java.util包中,是一个用来存放对象的容器。
①集合只能存放对象。比如你存一个int类型数据1放入集合中,其实它是自动转换成Integer类后存入的,Java中每一种基本类型都有对应的引用类型。
②集合存放的是多个对象的引用,对象本身还是放在堆内存中。
③集合可以存放不同类型、不限数量的数据类型。
2.Java集合可以分为Set、List和Map三种大体系
①Set:无序、不可重复的集合
②List:有序,可重复的集合
③Map:具有映射关系的集合
在JDK5之后,增加了泛型,Java集合可以记住容器中对象的数据类型。
二、HashSet集合
1.HashSet是Set接口的典型实现,大多数时候使用Set集合时都使用这个实现类。我们大多数时候说的set集合指的都是HashSet。HeshSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。
2.HashSet具有以下特点:
①不能保证元素的排列内容
②不可重复
③HashSet不是线程安全的
④集合元素可以使null
3.当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值决定该对象在HashSet中的存储位置。
4.如果两个元素的equals()方法返回true,但它们的hashCode()返回值不相等,HashSet将会把它们存储在不同的位置,但依然可以添加成功。
package day16; import java.util.HashSet; import java.util.Set; public class Test3 { public static void main(String[] argss){ Set set = new HashSet(); set.add(1);//添加元素 set.add("a"); System.out.println(set); set.remove(1);//移除元素 System.out.println(set); System.out.println(set.contains("a"));//判断是否包含元素 set.clear();//清空元素 System.out.println(set); } }
打印结果为:

package day16; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class Test3 { public static void main(String[] argss){ Set set = new HashSet(); set.add("a"); set.add("b"); set.add("c"); set.add("d"); set.add("d");//set集合存的值是不重复的 set.add(null);//可以存null,也体现了不能保证元素的排列内容 System.out.println(set); //使用迭代器遍历集合 Iterator it = set.iterator(); while(it.hasNext()){ System.out.println(it.next()); } //for each迭代集合(推荐使用
) for(Object obj : set){//这个的意思是把set的每一个值取出来,赋值给obj,直到循环set的所有值 System.out.println(obj); } System.out.println(set.size()); //获取集合的元素个数 } }
打印结果为:

三、hashCode()方法
HashSet集合判断两个元素相等的标准:两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法返回值也相等。(如果两个对象通过equals()方法返回true,这两个对象的hashCode值也应该相同)
四、泛型
package day16; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class Test3 { public static void main(String[] argss){ Set set = new HashSet();//等同于Set<Object> set = new HashSet<Object>(); set.add(1);//添加元素 set.add("a"); System.out.println(set); //如果想要集合只能存同样类型的对象,怎么做 //使用泛型 Set<String> set1 = new HashSet();//比如说指定String为集合的泛型,那么这个集合就不能使用String类型之外的数据类型 set1.add("abc"); // set1.add(123);//不是String类型,不能添加 } }

浙公网安备 33010602011771号