Java集合:集合简述、HashSet

集合

  • 集合只能存放对象,如int型数据被转换为Integer类后放入集合中
  • 集合存放的是多个对象的引用,对象本身在堆中
  • 集合可以存放不同类型,不限数量的数据类型
  • JDK5增加了泛型,Java集合可以记住容器中对象的数据类型

Java集合分为:

  • Set:无序、不可重复的集合
  • List:有序,可重复的集合
  • Map:具有映射关系的集合

HashSet

HashSet是Set接口的典型实现,大多set都指HashSet

HashSet类---实现--->set接口---继承--->Collection接口

  • HashSet按Hash算法来存储集合中的元素
  • HashSet的特点:
    • 不能保证元素的排列顺序
    • 不可重复(hashCode的返回值决定)
    • HashSet不是线程安全的
    • 集合元素可以是null
  • 当HashSet集合中存入元素是,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,由此确定对象的位置
  • 如果两个元素的equals()方法返回true,但hashCode()返回值不想相等,HashSet会存在不同位置,仍可成功添加

常用方法

  • 创建HashSet
Set set = new HashSet();//多态
  • add:添加,可以添加null
set.add(1);
set.add('c');
set.add('a');
//'a'和'c'的添加顺序不影响他们在set中的位置

//可以添加男
set.add(null);
  • remove:移除
set.remove(1);
  • contains:查看set中是否存在该内容,返回值为布尔值
set.contains(1);
  • clear:清空
set.clear();
  • set的遍历
  1. 使用迭代器遍历set
//使用迭代器遍历set
Iterator it = set.iterator();

while (it.hasNext()){
    System.out.println(it.next());
}
  1. for each增强for循环遍历set(推荐使用
//2. for each迭代
for(Object obj : set){
    System.out.println("for each:"+obj);
}
  • size:集合的大小
set.size();

hashCode()方法

  • HashSet中判断两个元素相同的标准:

    • 两个对象通过equals()比较相等
    • 两个对象的hashCode()返回值相等
  • 通常来说,如果两个对象equals()返回为true,两个对象的hashCode值也应相同;两个对象的hashCode值相同时,两个对象equals()返回值不一定相同(哈希碰撞)

  • 在判断是首先对hashCode()返回值进行比较,相同时再进行equals()比较,大大减少了执行equals()的次数,增加了执行效率。

  • 重写equals()时必须重写hashCode()

泛型

泛型,让集合只存放相同类型的对象

HashSet<类> ints = new HashSet();
//或
HashSet<类型> ints = new HashSet<类型>();//后面的<>可以不加

当类型为Object时,可以存放所有类型(所有类型都是Object的子类)

posted @ 2022-04-15 16:52  chachan53  阅读(38)  评论(0编辑  收藏  举报