容器的排序

从资料库的观点来看,Set、Map、Bag是无序的,而List是有序的,这边所谓的无序或有序,是指将容器中物件储存至资料库时,是否依容器物件中的顺序来储存。

然而从资料库取得资料之後,您也许会希望Set、Map等容器中的物件可以依一定的顺序来排列,您可以从两个层次来容器中的物件排序,一是在载入资料後於JVM中排序,另一是在资料库中直接使用order by子句来排序。

以 Set 这篇文章中的范例来作说明,要在JVM中就资料进行排序,您可以在映射文件中使用sort属性来定义容器的排序,这适用於Set与Map,例如:

User.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping
   PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

   <class name="onlyfun.caterpillar.User" table="user">
     ....
     <set name="emails" table="email" sort="natural">
       <key column="id"/>
       <element type="java.lang.String"
           column="address"/>
     </set>
   </class>

</hibernate-mapping>

sort="natural"表示使用物件的comparaTo()方法来进行排序,容器中的物件上必须有实作java.lang.Comparable 介面,例如String就有实作java.lang.Comparable介面,结果会使用字典顺序来排列容器中的物件。

您可以实现自己的排序方式,只要定义一个类别来实作java.util.Comparator介面,例如:

CustomComparator.java
package onlyfun.caterpillar;

import java.util.Comparator;

public class CustomComparator implements Comparator {
   public int compare(Object o1, Object o2) {
     if (((String) o1).equals(o2))
       return 0;
     return ((Comparable) o1).compareTo(o2) * -1;
   }
}

时间: 2025-01-07 15:52:27

容器的排序的相关文章

java容器 collection-JAVA中什么是容器?什么是集合?求大神指导

问题描述 JAVA中什么是容器?什么是集合?求大神指导 容器是什么?跟接口是什么关系?集合又是什么?求大神帮忙?????? 解决方案 Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),AttributeList(1.5),RoleList(1.5),RoleUnresolvedList(1.5), ConcurrentLinkedQueue(1.5),Ar

ACM STL容器和算法

1.4      STL 的组成 STL有三大核心部分:容器(Container).算法(Algorithms).迭代器(Iterator),容器适配器(container adaptor),函数对象(functor),除此之外还有STL其他标准组件.通俗的讲: 容器:装东西的东西,装水的杯子,装咸水的大海,装人的教室--STL里的容器是可容纳一些数据的模板类. 算法:就是往杯子里倒水,往大海里排污,从教室里撵人--STL里的算法,就是处理容器里面数据的方法.操作. 迭代器:往杯子里倒水的水壶,

C++容器使用经验总结(一)

容器 第1条:慎重选择容器类型. 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.slist是一个单向链表,rope本质上是一"重型"string. 非标准的关联容器hash_set.hase_multiset.hash_map和hash_multimap. vector<char> 作为string的替代.(见第13条) vector作为标

Java集合框架和数组的排序

根据约定,在使用java编程的时候应尽可能的使用现有的类库,当然你也可以自己编写一个排序的方法,或者框架,但是有几个人能写得比JDK里的还要好呢?使用现有的类的另一个好处是代码易于阅读和维护,这篇文章主要讲的是如何使用现有的类库对数组和各种Collection容器进行排序,(文章中的一 部分例子来自<Java Developers Almanac 1.4>) 首先要知道两个类:java.util.Arrays和java.util.Collections(注意和Collection的区 别)Co

java-并发-同步容器

Java常用的容器有ArrayList.LinkedList.HashMap等等,这些容器都是非线程安全的.如果有多个线程并发地访问这些容器时,就会出现问题.在编写程序时,必须要求程序员手动地在任何访问到这些容器的地方进行同步处理. 所以,Java提供了同步容器供用户使用,Java库本身就有多种线程安全的容器和同步工具. 1)Vector.Stack.HashTable Vector实现了List接口,Vector实际上就是一个数组,和ArrayList类似,但是Vector中的方法都是sync

java编程排序之内置引用类型的排序规则实现,和自定义规则实现+冒泡排序运用

第一种排序:[冒泡排序]基本数据类型的排序. [1]最简易的冒泡排序.效率低.因为比较的次数和趟数最多. 1 /** 2 * 最原始的冒泡排序. 3 * 效率低. 4 * 因为趟数和次数最多.都是按最大化的循环次数进行循环 5 * @Title: sort 6 * @Description: TODO(这里用一句话描述这个方法的作用) 7 * @param arr 8 * @return void 返回类型 9 * @author 尚晓飞 10 * @date 2014-8-5 上午8:42:4

慎重选择容器类型

  慎重选择容器类型 一.回顾C++提供的容器 Ø        标准的STL序列容器 vector.string.deque和list. Ø        标准的STL关联容器 set.multiset.map和multimap. Ø        非标准序列容器 slist和rope. Ø        非标准的关联容器 hash_set.hash_multiset.hash_map和hash_multimap. Ø        几种标准的非STL容器 数组.bitset.valarray

CSS3灵活的盒子模型(Flexible Box Module)

CSS3 标准里引入了一些新的盒子模型参数,在 CSS2 的基础上,我们将能更灵活地调整页面上各个容器的大小和位置.详细的说明可以看这个文档. 通过学习和测试,我发现这种新的盒子模型布局对建立自适应布局的页面带来很大的好处.在这篇文章中,我的所有例子都基于以下 HTML代码: 以下为引用的内容: <body> <div id="box1">1</div> <div id="box2">2</div> <

后台开发:核心技术与应用实践

后台开发:核心技术与应用实践 徐晓鑫 著 图书在版编目(CIP)数据 后台开发:核心技术与应用实践 / 徐晓鑫著. -北京:机械工业出版社,2016.8 ISBN 978-7-111-54339-8 I. 后- II. 徐- III. 网络-开发 IV. TP393.092 中国版本图书馆CIP数据核字(2016)第167884号 后台开发:核心技术与应用实践 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037) 责任编辑:李 艺 责任校对:董纪丽 印 刷: 版 次: