四时宝库

程序员的知识宝库

Collection中的Set集合(collection和set)

概述

Collection接口是存放元素的集合,由Collection接口派生的两个接口,list负责放重复的元素,而set则负责存放不重复的元素。

那么在存放的时候,set集合怎么判断元素是否都是重复的呢?

在Java中,用到了equals方法。

自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。

对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。

传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals

Set集合又是怎么取出元素?

我们都知道,在Java中只要是读取多个数据,都需要用到迭代器,增强 for(也就是循环)

例如:

迭代遍历

Set<String> set = new HashSet<String>();

Iterator<String> it = set.iterator();

while (it.hasNext()) {

String str = it.next();

System.out.println(str);

}

for循环遍历

for (String str : set)

{

System.out.println(str);

}

Set中的HashSet

HashSet(哈希表)

此类实现了Set接口,由哈希表(实际是HashMap实例)支持。它不保证set的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null元素。

特点:无序集合,存储和取出的顺序不同,没有索引,不存储重复元素。代码的编写和ArrayList完全一致。

HashSet特点:

?底层数据结构:哈希表(链表和数组的结合体);

?存储取出都比较快;

?线程不安全,运行速度快;

对象的哈希值

?如果没有重写父类,每次运行的结果都是不同的整数;

?如果子类重写父类的方法,哈希值,自定义;

?存储到HashSet的依据;

字符串的哈希值

String类继承Object,重写了父类的方法hashCode

哈希表的存储过程

public static void main(String[] args)

{

HashSet<String> set=new HashSet<String>();

set.add(new String("abc"));

set.add(new String("abc"));

set.add(new String("abc"));

set.add(new String("bbc"));

set.add(new String("bbc"));

System.out.println(set);

}

而LinkedHashSet集合,他是基于链表的哈希表实现,继承自HashSet滴

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接