复杂数据结构的排序和检索问题
来源:互联网 发布:three.js游戏 编辑:程序博客网 时间:2024/05/01 23:08
前面几篇讨论了利用ArrayList和Collections对数据元素进行排序和折半查找的功能。但排序也仅限于简单结构的排序,如{452,3,5,14,89,632}等,检索也是针对这些简单结构的检索,采用默认的排序算法和比较器就可以进行。但实际应用中却往往没有那么简单,我们经常需要对一个具有复杂数据结构的列表进行排序和检索操作,直接应用其默认算法是不可能实现的。这时,通常需要针对特定的复杂数据结构自定义一个比较器Comparator,通过这个来实现我们的功能。
在网上搜集了一下,发现在复杂数据结构方面的文章尤其是优秀的文章很少,但有一篇我很满意,它帮我解决了问题,URL是:http://blog.csdn.net/blundblade/archive/2004/08/07/67774.aspx,原文作者对这个问题有很深入的阐述并有详细的示例。我在原文的基础上,作了一个小小的修改,补充了检索功能和对检索出的某个元素(列表中的一个对象)的处理功能。如,可以利用BinarySearch()方法检索出符合条件的元素(对象),然后对这个元素的某数据项(子元素)进行处理,如我的程序中使其工资(pay)的值增加100。这样,复杂数据结构的排序、检索、元素处理问题都一并解决了了,呵呵!
下面是我对http://blog.csdn.net/blundblade/archive/2004/08/07/67774.aspx修改后的程序代码。
import java.util.ArrayList;
import java.util.Collections;
public class StructureSort {
public static void main(String[] args){
ArrayList list = new ArrayList();
list.add(new Programmers("张三", "C", 12000));
list.add(new Programmers("李四", "Java", 200));
list.add(new Programmers("王五", "C++", 5000));
list.add(new Programmers("钱六", "VB", 3000));
System.out.println("before sort: " + list);
Collections.sort(list);
System.out.println("after sort: " + list);
int i=Collections.binarySearch(list,new Programmers("张三", "C", 5000));//检索某元素
if (i>=0){Object j=list.get(i);//下面取出第三个元素,对其进行加法运算.
Programmers other0 = (Programmers)j;
int m=(int)other0.pay+100;//类词频加1
System.out.println("工资变为: " +m);
};
//int i=Collections.binarySearch(list,new Programmers("", "", 12000));实际应用时采用这个,呵呵!
System.out.println("序号为: " + i);
}
}
class Programmers implements Comparable{
private String name;
private String language;
double pay;
public Programmers(String name, String language, double pay) {
this.name = name;
this.language = language;
this.pay = pay;
}
public int compareTo(Object o) {
Programmers other = (Programmers)o;
return (int)pay - (int)other.pay;
}
public String toString(){
return "{name: " + name + ", language: " + language + ", money: " + pay + "}";
}
}
运行结果是:
before sort: [{name: 张三, language: C, money: 12000.0}, {name: 李四, language: Java, money: 200.0}, {name: 王五, language: C++, money: 5000.0}, {name: 钱六, language: VB, money: 3000.0}]
after sort: [{name: 李四, language: Java, money: 200.0}, {name: 钱六, language: VB, money: 3000.0}, {name: 王五, language: C++, money: 5000.0}, {name: 张三, language: C, money: 12000.0}]
工资变为: 5100
序号为: 2
- 复杂数据结构的排序和检索问题
- 算法篇-排序和检索-6174问题
- 二叉树排序树的建立和检索【数据结构实践报告】
- 数据库中表的检索和排序
- STL排序和检索
- MySQL检索数据和排序检索.md
- 排序与检索6174问题
- 复杂的桶排序
- Lucene检索结果的排序问题、boost(激励因子)
- 解决数据多字段复杂排序的问题
- 基于复杂问题求解策略设计的排序算法
- 索引-排序和检索
- android实现A-Z排序和检索的功能
- 【数据结构】复杂表达式的求值
- 数据库检索和全文检索的比较(性能,匹配度准确度,相关度排序)
- java之最简单和最复杂的排序算法
- 数据结构-单链表排序遇到的一个问题
- 引用 Map 数据结构的排序问题
- 集合类型
- 在.NET程序中小心使用String类型
- [合集]阿甘正传部分台词中英对照
- SCJP过了,91%!
- flash案例展示:极品网测
- 复杂数据结构的排序和检索问题
- 时隔多日再次来到这里
- 我带你去哪里 III
- 五个小故事引导你走出人生误区
- Web开发的一点心得(二年工作总结版)
- 转贴一篇
- FCKeditor使用手记
- Linux下安装VMware手记
- 微软软件开发技术二十年回顾