集合初探--认识Set

[size=large][color=blue]1. HashSet[/color][/size]

[img]http://dl.iteye.com/upload/attachment/447217/358efee3-0e78-3cc7-a31f-8eca60763b6f.jpg[/img]
·基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成。


public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable {
static final long serialVersionUID = -5024744406713321676L;

// 底层使用HashMap来保存HashSet中所有元素。
private transient HashMap<E,Object> map;

// 定义一个虚拟的Object对象作为HashMap的value,将此对象定义为static final。
private static final Object PRESENT = new Object();

public HashSet() {
map = new HashMap<E,Object>();
}

public Iterator<E> iterator() {
return map.keySet().iterator();
}

public int size() {
return map.size();
}

public boolean isEmpty() {
return map.isEmpty();
}

public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
}

[color=red]·HashMap中value的生成:系统构造一个static final的Object对象作为HashMap的value。[/color]
·存放的元素就是HashMap的keySet--不允许重复,无序,允许null;随机存取。


[size=large][color=blue]2.LinkedHashSet[/color][/size]

[img]http://dl.iteye.com/upload/attachment/447219/297227b2-e9b9-3fa6-8d9a-0f4ebd2de156.jpg[/img]

·LinkedHashSet底层使用LinkedHashMap来保存所有元素,它继承与HashSet,其所有的方法操作与HashSet相同。
·仅仅提供了四个构造方法,并通过传递一个标识参数(作用仅仅是为了重载方法),调用父类的构造器构造一个LinkedHashMap来实现。

HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值