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类型,不能添加    
        
    }
}        

 

posted @ 2020-03-23 20:51  苏胖胖  阅读(159)  评论(0)    收藏  举报