Set 接口
set类型的对象,被加入的对象不能重复,同时被加入的对象也没有固定的顺序
Hashset
import java.util.HashSet;
import java.util.Iterator;
//Hashset 不记录先后顺序,不能加重复的
public class HashSetExample {
public static void main(String[] args)
{
HashSet set =new HashSet();
set.add(new Integer(30));
set.add(new Double(20.5));
set.add("I am Narcissus");
set.add(new Person());
Iterator it=set.iterator();
//枚举输出或者foreach
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
LinkedHashSet
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
//记录先后顺序,但不能添加重复
public static void main(String[] args) {
Set set = new LinkedHashSet();
set.add(new Integer(30));
set.add(new Double(20.5));
set.add(new Double(100.00));
set.add(new Integer(90));
for(Object o:set)
{
System.out.println(o);
}
}
}
TreeSet
import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample {
//可以排序,按照升序排列元素,不可以重复
public static void main(String[] args) {
Set set = new TreeSet();
set.add(new Integer(30));
set.add(new Integer(20));
set.add(new Integer(100));
set.add(new Integer(90));
for(Object o:set)
{
System.out.println(o);
}
}
}
Set映射
使用set接口的实现类,实现对持久化对象保存相关联的数据。
例如:用户定义一个User类,User类中使用Set对象保存用户的多个email
<!-- table="email"是email的表 ,column="email是email中的email字段--> <set name="emails" table="email"> <key column="userid" foreign-key="id" /> <element type="java.lang.String" column="email" /> </set>
List接口
List对象所包含的对象,可以重复加入,同时还会记录加入的对象的先后顺序。
ArrayList
记录先后顺序,可以加入重复的
LinkedList
记录先后顺序,可以加入重复的,效率比arraylist稍高
list映射
存储list对象的集合时,需要在数据库一并存储记录的顺序
<list name="emails" table="email"> <key column="userid" foreign-key="id" /> <index column="idx" type="java.lang.Integer"></index> <element type="java.lang.String" column="email" /> </list>
bag映射
bag对象允许重复的元素,但是不记录添加对象的先后顺序。
在jdk中没有提供bag集合的类型,Hibernate中bag映射使用的是自己的bag类型
bag的类型 org.hibernate.collection.PersistentBag
<bag name="emails" table="email"> <key column="userid" foreign-key="id" /> <element type="java.lang.String" column="email" /> </bag>
IdBag映射
bag集合映射的一种扩展,Hibernate提供还提供IdBag映射,可以在定义Bag映射时,为每个加入的对象指定id;
Map接口
map对象中保存的是key/value形式的一个对象,key与value都是object类型的变量,key与value是一一对应的关系,key值不能重复
HashMap
对象不会记录先后顺序
LinkedHaspMap
记录先后顺序
TreeMap
会把key值进行排序
Map映射
Map对象所包含的每一个对象(value)都有一个key与之对应,所以将map集合对象的数据存储到数据库表的时候,必须同时储存value对应的key值
<map name="phone" table="phone" order-by="phone_number"> <key column="userid" foreign-key="id"></key> <map-key type="java.lang.String" column="usage"></map-key> <element type="java.lang.String" column="phone_number"></element> </map>
集合映射的排序:
利用<set>或<map>标签的sort属性对集合中的数据进行排序
<map name="phone" table="phone" sort="natural"> <key column="userid" foreign-key="id"></key> <map-key type="java.lang.String" column="usage"></map-key> <element type="java.lang.String" column="phone_number"></element> </map>
利用sql的order by子句排序
<map name="phone" table="phone" order-by="phone_number" desc> <key column="userid" foreign-key="id"></key> <map-key type="java.lang.String" column="usage"></map-key> <element type="java.lang.String" column="phone_number"></element> </map>