首先讲下Set的一些特性:
Set是Collecion的子接口,里面的元素不允许重复.每个具体的 Set 实现类依赖添加的对象的 equals()方法来检查独一性。Set接口没有引入新方法,所以Set就是一个Collection,只不过其行为不同。
如何界定是否是重复元素?Set最多可含一个null元素;对于任意的非null元素e1和e2,都满足e1.equals(e2)==false.
其实Set与List的最大区别就是:Set是在Map的基础上的实现
看看HashSet
public HashSet(int initialCapacity) {
map = new HashMap<E,Object>(initialCapacity);
}
public boolean add(E o) {
return map.put(o, PRESENT)==null;
}
再看看TreeSet
public TreeSet() {
this(new TreeMap<E,Object>());
}
private TreeSet(SortedMap<E,Object> m) {
this.m = m;
keySet = m.keySet();
}
这也就是Set于Map中key的特性一样的原因...
---------------------------------------------
下面介绍Set接口3种主要的实现类。
HashSet 为快速查找而设计的Set。存入HashSet的元素必须定义hashCode()。
TreeSet 保存次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。元素必须实现Comparable接口。
LinkedHashSet 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入顺序)。在使用迭代器遍历Set时,结果会按插入的次序显示。元素必须定义hashCode()方法。
在查看springside原码的时候,看到domain类使用的是LinkedHashSet类
private Set<Role> roles = new LinkedHashSet<Role>(0);
在POEAA中,有这样一段话:
引用
在使用集合的时候,在面向对象语言中,通常使用数组或者列表这样的有序集合,然而,在保存到关系数据库的时候想要维持一个绝对有序的集合是非常困难的,因此,有必要考虑使用无序集来存储集合.
所以在domain中,使用Set接口,而不使用List!
在Set中,可以使用HashSet!
当要使用@OrderBy时候,可以再使用LinkedHashSet,使之有顺序.
分享到:
相关推荐
本篇文章小编为大家介绍,java Collection 之Set使用说明。需要的朋友参考下
Java集合Collection、List、Set、Map使用详解
java集合框架之Collection部分,包括List与Set的常用类,示例多,且皆有详细注释。
Java集合Collection、List、Set、Map使用详解
Java集合排序及java集合类详解(Collection、List、Map、Set).doc
Java集合排序及java集合类详解 (Collection, List, Set, Map)
Java集合Collection、List、Set、Map使用详解.doc
Java集合Collection、List、Set、Map使用详解.pdf
Java集合排序及java集合类详解(Collection、List、Map、Set)
Set接口中的方法和Collection一致。 |--HashSet: 内部数据结构是哈希表 ,是不同步的。 如何保证该集合的元素唯一性呢? 是通过对象的hashCode和equals方法来完成对象唯一性的。 如果对象的hashCode值不同,...
java集合collection、list、set、map使用详解.doc
Java集合排序及java集合类详解(Collection、List、Map、Set)
Java集合Collection、List、Set、Map使用详细讲解.doc
Java集合排序及java集合类详解(Collection、List、Map、Set
Java集合框架中的Set接口是一种不允许包含重复元素的集合。Set接口继承自Collection接口,因此它具有Collection接口定义的所有方法。同时,Set接口还具有自己的特殊方法,例如:添加元素、删除元素、判断元素是否...