list 根据list按照某个字段排序分成几个组

    SharePoint中如何使得用户不能通过对WSS的List中添加或修改使得某个指定字段存在重复数据。并需要尽可能满足以下需求:  1) & 希望解决方案比较简单,并且易于部署(客户希望在30分钟内能完成部署)  2)&& 希望在部署过程中不需要重新编译任何工程  3)&& 有一定的通用性,不能针对一个特定的List开发一个组件  ---------------------------------------------------------------  目前研究的结果:  研究结果及解决方案(以新建记录为例)  ==================  系统实现思路  =======  由于所涉及的步骤牵涉修改WSS默认的模板和JavaScript代码,所以请在测试环境中完成下述步骤并备份相关信息。  1.& 当用户新建记录、提交表单时,WSS会首先调用ClickOnce()函数(请在新建记录页面点击右键,查看HTML源文件),然而,ClickOnce()并不存在NewForm.ASPx文件中,而是在相应List模板的SCHEMA.XML中(如,我们使用Customized List,List模板的路径是C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE\1033\STS\LISTS\CUSTLIST)且所有WSS List都会调用OWS.JS文件,引用其中的JavaScript。表单会提交到/_vti_bin/owssvr.dll上,最终插入数据库。这是默认的表单提交过程。  2.& 为了在期间加入定制的代码,检查是否会产生重复数据。我们可以采取以下几种通讯方式:  a) 在SCHEMA.XML中拦截 ClickOnce()函数,使用Microsoft.XMLHTTP对象向Server端的ASPX页发送POST请求,并接收Server端的回传数据,SCHEMA.XML的作用域是一个特定的List。在本样例中,我们选用这种方式  b) 由于在提交表单的流程中,SCHEMA.XML中定义的ClickOnce()函数最终会调用OWS.JS中的程序段,虽然,我们可以在OWS.JS的有关函数中拦截默认的提交流程,并向Server端发送请求,但是,我们不推荐这种方式,因为修改OWS.JS可能影响到多个List。只有在特定的条件下,才使用这种全局的方式,并且希望您进行全面的测试。  c) 前两种方式是在客户端向服务端发送请求,进行验证,如果需要全部PostBack回服务器端进行认证,请使用FrontPage 2003,打开NewForm.aspx,在输入WebPart上点右键,并选择“Customized SharePoint List Form”菜单项,将输入WebPart转换为表格模式,如下所示:  此时我们可以使用传统ASP.NET窗体的方式,在上面添加自定义的输入栏位和提交按钮,并可以提交到特定的后台页面。这种方式需要对每个List的NewForm.ASPX分别处理。  3.& 服务器端是一个ASP.NET页面,它将接收ListID(List的Guid)和FieldValue(需要字段填充值),ASP.NET页面会读取一个XML配置文件,并比对其中的ListID,用以决定是否需要对本List进行验证(针对多个List的通用解决方案)。如果需要验证,则从XML配置中读取需要验证的字段名称等信息,并进行查询。无论成功与否ASP.NET页面会将返回信息回写到客户端。  4.& 客户端的Microsoft.XMLHTTP对象获得回写的字符串后进行必要的解析,并决定相应的流程。  具体实现步骤  =======  1. 本样例中将使用Customized List模板为例,在C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE\1033\STS\LISTS目录中复制CUSTLIST目录,并命名位LIANGMING  2. 打开上层目录下的XML目录(C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE\1033\STS\XML)中的ONET.XML,并找到ListTemplates片段,插入如下黑斜体部分,将Type设为小于1000,且和当前List的Type字段没有重复的数值,并保持Name域的信息和复制的目录名称相同。  ListTemplates  ListTemplate Name=custlist DisplayName=Custom List Type=100 BaseType=0 nQuickLaunch=TRUE SecurityBits=11 Description=Create a custom list when you want to specify your own columns. The list opens as a Web page and lets you add or edit items one at a time. Image=/_layouts/images/itgen.gif/ListTemplate  ListTemplate Name=LIANGMING DisplayName=Liang Ming Customized List Type=500 BaseType=0 nQuickLaunch=TRUE SecurityBits=11 Description=LIANG MING Image=/_layouts/images/itgen.gif/ListTemplate  3. 在命令窗口中调用IISReset,重启IIS服务  4. 在新建List页面(任何对List模板的修改,必须新建一个List才可以看到结果)我们会发现有个LIANGMING的List模板  5. 打开List模板目录下的SCHEMA.XML,添加如下代码:  function CheckField()  {  var fldV  for(i=0;ifrm.form.elements.i++)  {  //查找特定字段的值(需要检查的值),此处使用title属性,可根据实际情况修改  if(frm.form.elements[i].title == Employee ID){  fldValue = frm.form.elements[i].    }  }  //默认List的GUID存放在Hidden的onetidIOHidden字段中  var lstId = document.getElementById(onetidIOHidden);  //使用Microsoft.XMLHTTP向服务端的页面发送请求  var xmlhttp = new ActiveXObject(Microsoft.XMLHTTP);  xmlhttp.Open(POST,/_layouts/CheckField/DoCheck.aspx?ListID= + lstId.value + FieldValue= + fldValue,false);  xmlhttp.send();  //获取返回信息  var resp = new String(xmlhttp.responseText);  //如果返回信息包含表示错误的标签则改变程序流程  if(resp.indexOf(/ERROR)& 0)    else    }  function ClickOnce()  {  //开启点击保存按钮后的debug选项,仅仅供调试使用  //请在正式环境中注释此行    //验证失败  if(! CheckField())  {  alert(Please check the duplicated data);    }  SetAction();  if(!g_MSclicked)  ……  6. 在命令窗口中调用IISReset,重启IIS服务。并新建一个List,添加Employee ID字段(和JavaScript中获取的字段名一致),在NewForm.aspx页面中查看源程序,检查是否有上述代码?如果以上步骤没有成功,请及时与我联系。  7. 将服务器端程序部署到C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE\LAYOUTS目录中(对应/_layouts/虚拟目录)并建立应用程序。访问GetListGuid.aspx页面,获取特定List的GUID,按照样例代码配置ListConfig.xml文件。在浏览器中传入ListID和FieldValue值,测试ASP.NET页面是否正常工作。  8. 服务端的页面需要获取SharePoint中Site,Web等对象,可能出现权限问题,请自行参考SharePoint SDK中的权限提升(Impersonate)方法,并加以实施。请详见样例代码。  9. 浏览新建记录页面,测试,并且可以激活IE的客户端debug,跟踪JavaScript的执行  补充文档  =======  /library/default.asp?url=/library/en-us/spsdk11/CAML_Schema/spxmlconONET.asp& ONET.XML  /library/en-us/spsdk11/CAML_Schema/spxmlconexample8.asp?frame=true&& Example 8 ― Creating a new template for custom lists  /library/en-us/spptsdk/html/tsptDocLibEvents.asp?frame=true Impersonate Source Code  文件列表  =======  Server端ASP.NET工程  1. DoCheck.aspx 检查重复记录  2. GetListGuid.aspx 显示List的Guid,帮助设置配置文件  3. ListConfig.xml配置文件  客户端  1. SCHEMA.XML经过修改的List模板文件  2. LIANGMING文件夹,定制的列表模板(C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE\1033\STS\LISTS\LIANGMING)  3. ONET.XML List模板配置文件C:\Program Files\Common Files\Microsoft Shared\web server extensions\60\TEMPLATE\1033\STS\XML  4. Process.vsd 上述流程的示意图  测试结果如下截图所示  ===========  a) List ListID={1accf07-ef284fbc} Site=http://localhost:8080/ Web=sites/WSSSite Field=Employee ID/List  b) 添加第一条记录截图 (Employee ID是不可重复字段):  c) 试图添加同Employee ID的记录&
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
上一篇:下一篇:
相关经验教程
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益J2SE基础夯实系列之List中的数据如何根据对象的某一个或多个字段排序引出Comparable和comparator的使用
第一节& 对于引入题目的探讨
首先把引入题目表述的清楚一些,在一个List中存储的是一些对象实例,而对象实例包含多个属性字段,我们要根据对象的某个或者多个属性来对List进行排序。
假设List中存储的都是Student类的实例,Student类包含name、gender、id属性。首先根据Student实例中的name属性排序,如果两个名字相同,就再根据id属性排序。
Student类如下:
&strong&package chapter1;&
public class Student {&
&&& private S&
&&& private S&
&&& public String getName() {&
&&& public void setName(String name) {&
&&&&&&& this.name =&
&&& public String getGender() {&
&&& public void setGender(String gender) {&
&&&&&&& this.gender =&
&&& public int getId() {&
&&& public void setId(int id) {&
&&&&&&& this.id =&
}&/strong&&
&&&&&&&&& 假设有三个学生:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 姓名&&&&&& 性别&&&&&&& ID
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 宋超&&&&&& 男&&&&&&&&& 100120
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 伍星&&&&&& 男&&&&&&&&& 100121
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 宋超&&&&&& 女&&&&&&&&& 100122
&&&&&&&&&&& 把这三个学生存储在List里面,要求首先按照姓名进行排序,如果姓名相同就按照ID排序。
1.1.1第一种实现方式:使用Comparable接口;
&&&&&&&&& 使用这种方式时,Student类必须继承这个接口,并且实现compareTo方法。并且compareTo方法是这个接口的唯一方法。需要注意到一点,在《Effective 》第十二条中,提供了一个通用的写法,也就是在类继承的Comparable接口的时候,利用泛型指明能比较的类型。把Student类改写如下:
&&&&&&&&&&&&&&
package chapter1;&
public classStudent implementsComparable&Student&{&
&&& private S&
&&& private S&
&&& public String getName() {&
&&& public void setName(String name) {&
&&&&&&& this.name =&
&&& public String getGender() {&
&&& public void setGender(Stringgender) {&
&&&&&&& this.gender =&
&&& public int getId() {&
&&& public void setId(int id) {&
&&&&&&& this.id =&
&&& @Override&
&&& public int compareTo(Student arg0){&
&&&&&&& //String、Integer、Double、Float等类型都实现有compareTo方法&
&&&&&&& if(pareTo(arg0.name) == 0) {&
&&&&&&&&&&& return Integer.valueOf(id).compareTo(Integer.valueOf(arg0.id));&
&&&&&&& }else{&
&&&&&&&&&&& return pareTo(arg0.name);&
&&&&&&& }&
在《Effective Java》中对于compareTo方法有以下几点提示:
&最好和equals方法值相同
那么,在客户端调用的时候,直接写如下代码:
package chapter1;&
import java.util.ArrayL&
import java.util.C&
import java.util.L&
public class ClientInterface {&
&&&&&&&&&&&&&&&&&& publicstatic void main(String[] args) {&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& Studentsongchao = new Student();&
&&&&&&&&&&&&&&&&&&&&&&&&&&& songchao.setGender(&Man&);&
&&&&&&&&&&&&&&&&&&&&&&&&&&& songchao.setId(100150);&
&&&&&&&&&&&&&&&&&&&&&&&&&&& songchao.setName(&SongChao&);&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& Studentwuxing = new Student();&
&&&&&&&&&&&&&&&&&&&&&&&&&&& wuxing.setGender(&Man&);&
&&&&&&&&&&&&&&&&&&&&&&&&&&& wuxing.setId(100121);&
&&&&&&&&&&&&&&&&&&&&&&&&&&& wuxing.setName(&WuXing&);&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& Studentsongchao2 = new Student();&
&&&&&&&&&&&&&&&&&&&&&&&&&&& songchao2.setGender(&Women&);&
&&&&&&&&&&&&&&&&&&&&&&&&&&& songchao2.setId(100130);&
&&&&&&&&&&&&&&&&&&&&&&&&&&& songchao2.setName(&SongChao&);&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& List&Student&students = new ArrayList&Student&();&
&&&&&&&&&&&&&&&&&&&&&&&&&&& students.add(songchao);&
&&&&&&&&&&&&&&&&&&&&&&&&&&& students.add(wuxing);&
&&&&&&&&&&&&&&&&&&&&&&&&&&& students.add(songchao2);&
&&&&&&&&&&&&&&&&&&&&&&&&&&& for(Studentstudent : students) {&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& System.out.println(&Name& & + student.getName() + & ID& & + student.getId());&
&&&&&&&&&&&&&&&&&&&&&&&&&&& }&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& System.out.println();&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& Collections.sort(students);&
&&&&&&&&&&&&&&&&&&&&&&&&&&& for(Studentstudent : students) {&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& System.out.println(&Name& & + student.getName() + & ID& & + student.getId());&
&&&&&&&&&&&&&&&&&&&&&&&&&&& }&
&&&&&&&&&&&&&&&&&& }&
&&&&&&&&&&&&&&&&&&&
输出结果如下:
Name& SongChao ID& 100150&
Name& WuXing ID& 100121&
Name& SongChao ID& 100130&
Name& SongChao ID& 100130&
Name& SongChao ID& 100150&
Name& WuXing ID 100121&
1.1.2另外一种方式:直接使用比较器comparator
&&&&&&&& 直接使用比较器的情况下,Student类不必继承Comparable接口,当然也不必实现compareTo方法。
&&&&&&&& 直接看调用代码,但是注意一点,这里的Student类没有继承Comparable接口。
&&&&&&&& 直接在上面的客户端代码中,把Collections.sort方法替换为:
Collections.sort(students, newComparator&Student&() {&
&&&&&&&&&&& @Override&
&&&&&&&&&&& public int compare(Student arg0,Student arg1) {&
&&&&&&&&&&&&&&& if(arg0.getName().compareTo(arg1.getName())== 0) {&
&&&&&&&&&&&&&&&&&&& return Integer.valueOf(arg0.getId()).compareTo(Integer.valueOf(arg1.getId()));&
&&&&&&&&&&&&&&& } else {&
&&&&&&&&&&&&&&&&&&& returnarg0.getName().compareTo(arg1.getName());&
&&&&&&&&&&&&&&& }&
&&&&&&&&&&& }&
&&&&&&&&&&&&
&&&&&&& });&
输出结果和第一种方式相同。
还有一个注意点,那就是排序的顺序,是按照由小到大还是由大到小。上面那种方式显然是从小到大排序,那么如何从大到小排序?只要改变参数顺序即可:
Collections.sort(students,newComparator&Student&() {&
&&&&&&&&&& @Override&
&&&&&&&&&& public int compare(Student arg0,Student arg1) {&
&&&&&&&&&&&&&& if(arg1.getName().compareTo(arg0.getName()) == 0) {&
&&&&&&&&&&&&&&&&&& return Integer.valueOf(arg1.getId()).compareTo(Integer.valueOf(arg0.getId()));&
&&&&&&&&&&&&&& }else{&
&&&&&&&&&&&&&&&&&& return arg1.getName().compareTo(arg0.getName());&
&&&&&&&&&&&&&& }&
&&&&&&&&&& }&
&&&&&&&&&&&
&&&&&& });&
以上是对于sort方法的小总结,Arrays中的sort方法类似。
第二节& Collections与Arrays概念分析
1.2.1 Collection和Collections的区别
&&&& Collection是java.util下的接口,是各种集合结构的父接口。继承它的接口主要有Set和List。
&&&& Collections是java.util下的专用静态类,包含有各种有关集合操作的静态方法。提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
1.2.2 Array与Arrays的区别
&&&& Arrays也是一个静态类,专门用来操作array,提供搜索、排序等静态方法,还提供一个允许把数组当作列表查看的静态工厂方法asList。
第三节& 其它常用方法总结(第四节为使用中容易出现错误的方法介绍,第五节源代码)
1.3.1 Collections中的常用方法
&&&&&&&&&&& java.util.Collections提供了一些静态方法实现了基于list容器的一些常用算法:
1)& addAll(Collection c, T& elements);//将所有指定的元素添加到指定的collection中。
2)& void sort(List);//对list容器里的元素进行排序
3)& void reverse(List);//对List容器对象进行逆序排序
4)& void copy(Listdest,List src)//将List src容器里的内容全部拷贝到List dest容器中
5)&& int binarySearch(List,Object)//对于顺序的List容器中采用折半查找的方法查找特定的对象
6)&& boolean disjoint(Collection c1, Collection c2);//如果两个指定的collection中没有相同的元素,返回true。
7)&& fill(List list, T obj); // 使用指定元素替换指定列表中的所有元素。
8)&& int frequency(Collection c, Object o);//返回指定的Collection中对于指定对象的元素数。
9)&& indexOfSubList(List src, List target);//返回源表中第一次出现指定目标列表的起始位置,如果没有这样的列表就返回-1。
10) lastIndexOfSubList(List src, List target);//最后一次的起始位置,没有则返回-1
11) max(Collection coll);//根据元素的自然顺序,返回collection的最大值;
12) max(Collection coll,Comparator comp);//根据比较器产生的顺序,返回最大元素。
13) min同上
14) replaceAll(List list, T oldVal, T newVal);//使用另外一个值替换列表中出现的所有某一指定值。
15) reverseOrder();//逆转comparable接口的对象collection的自然顺序。例如:假设a是一个字符串数组,那么:
Arrays.sort(a, Collections.reverseOrder());将会按照字典逆序排序。
16) reverseOrder(Comparator cmp);返回一个强行逆转比较器的顺序
17) rotate(List list, intdistance);//根据指定的距离轮换列表中的元素。
18) shuffle(List list);//对列表随机排序
19) shuffle(List list, Random rnd);//根据指定的随机源排序
20) swap(List list, int i, int j);//在指定列表的指定位置处交换元素
package chapter1;&
import java.util.ArrayL&
import java.util.A&
import java.util.C&
import java.util.C&
import java.util.L&
public class CollectionsMethod {&
&&&& * @param args
&&& public static void main(String[] args) {&
&&&&&&& List&Integer& collection = new ArrayList&Integer&();&
&&&&&&& /*1----两种方式 */&
&&&&&&& Collections.addAll(collection, 1, 2, 3);&
&&&&&&& System.out.println(collection.toString());&
&&&&&&& Integer[] moreInts = {10, 7, 4, 9};&
&&&&&&& Collections.addAll(collection, moreInts);&
&&&&&&& System.out.println(collection.toString());&
&&&&&&& /*2----简单类型下sort的使用 */&
&&&&&&& Collections.sort(collection);&
&&&&&&& System.out.println(collection.toString());&
&&&&&&& /*3----逆序*/&&
&&&&&&& Collections.reverse(collection);&
&&&&&&& System.out.println(collection.toString());&
&&&&&&& /*4----复制*/&&
&&&&&&& List&Integer& copyList = new& ArrayList(Arrays.asList( new& Object[collection.size()]));&
&&&&&&& Collections.copy(copyList, collection);&
&&&&&&& copyList.remove(0);&
&&&&&&& System.out.println(copyList.size());&
&&&&&&& System.out.println(copyList.toString());&
&&&&&&& System.out.println(collection.toString());&
&&&&&&& /*4----另外一种方式 */&&
&&&&&&& List array = new ArrayList(collection);&
&&&&&&& System.out.println(array.toString());&
&&&&&&& System.out.println(collection.toString());&
&&&&&&& /*5----二分查找,首先把列表排序才行 */&
&&&&&&& List&Integer& bsList = new ArrayList&Integer&();&
&&&&&&& bsList.add(9);&
&&&&&&& bsList.add(12);&
&&&&&&& bsList.add(2);&
&&&&&&& bsList.add(78);&
&&&&&&& bsList.add(10);&
&&&&&&& System.out.println(bsList.toString());&&&&&&&
&&&&&&& Collections.sort(bsList);&
&&&&&&& System.out.println(bsList);&
&&&&&&& int index = Collections.binarySearch(bsList, 20);&
&&&&&&& System.out.println(index);&
&&&&&&& /*6----判定两个collection中是否没有相同的元素,返回布尔值*/&
&&&&&&& System.out.println(Collections.disjoint(bsList, array));&
&&&&&&& /*7----返回指定对象的个数*/&
&&&&&&& System.out.println(Collections.frequency(bsList, 10));&
&&&&&&& /*8----子列表在指定列表中的位置*/&
&&&&&&& List&Integer& subList = new ArrayList&Integer&();&
&&&&&&& subList.add(9);&
&&&&&&& subList.add(10);&
&&&&&&& subList.add(5);&
&&&&&&& subList.add(1);&
&&&&&&& System.out.println(Collections.indexOfSubList(bsList, subList));&
&&&&&&& /*9----返回最大最小值 & 倒序 & 循环移位 & 交换*/&
&&&&&&& System.out.println(Collections.max(subList));&
&&&&&&& Collections.reverseOrder();&
&&&&&&& System.out.println(subList.toString());&
&&&&&&& Collections.rotate(subList, 2);&
&&&&&&& System.out.println(subList.toString());&
&&&&&&& Collections.swap(subList, 0, 2);&
&&&&&&& System.out.println(subList.toString());&
1.3.2 Arrays中的常用方法
Arrays中的方法比较简单,基本上分为
1) asList方法,把一个数组转换成list
2) 二分查找方法,可以指定在数组中的范围内执行
3) toString方法
4) sort方法
第四节& 容易出现错误的方法介绍
1.4.1Collections中容易出现错误的方法介绍
&&& 1)copy方法
所以使用了Collections.copy()方法来进行拷贝,但是这样就接触到了此方法所报出的异常:
举例如下:
List src1 = new& ArrayList( 3 )
src1.add( & a & );
src2.add( & b & );
src3.add( & c & );
如果你使用下面方法copy链表
/** **************************** */
List des1 = new& ArrayList( 3 );
Collections.copy(des1,src1);
/** **************************** */
将会出错,抛出数组越界异常。明明已经设置了长度为3,为什么还会出错?
打印出des1.size()才知道des1的长度为0;3表示的是这个List的容纳能力为3,并不是说des1中就有了3个元素。查看api才知 道,它的capacity(容纳能力大小)可以指定(最好指定)。而初始化时size的大小永远默认为0,只有在进行add和remove等相关操作 时,size的大小才变化。然而进行copy()时候,首先做的是将desc1的size和src1的size大小进行比较,只有当desc1的 size 大于或者等于src1的size时才进行拷贝,否则抛出IndexOutOfBoundsException异常。
作者:Allen_Zhao_2012
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'把一个长字符串分解成若干个固定长度的短字符串,由于事先不知道长字符串的长度,以及短字符串的数量,只能使用List。 public static void get_list_sbody(String s){
// 计数变量
int num = 0;
// 每行的字符数
int r_num = 27;
String sx =
new String("");
lst_sbody = new ArrayList();
char[] cr =s.toCharArray();
for(int i=0; i&cr. i++){
// 换行或字符足够时换行
if ((cr[i] == '/n') || (num == r_num)){
sx = sx + cr[i];
lst_sbody.add(sx);
sx = sx + cr[i];
}其中,s是需要转换的长字符串。首先使用toCharArray()将s转换成字符串数组。然后,对每一个字符,如果该字符是回车符,或者字符数量已达到规定的数量,则生成一个新字符串;否则,将该字符加入当前的字符串。

我要回帖

更多关于 java list 多字段排序 的文章

 

随机推荐