class M{
private Vector list = null;
private int order;public Vector getList() {
return list;
}public void setList(Vector list) {
this.list = list;
}
public int getOrder() {
return order;
}public void setOrder(int order) {
this.order = order;
}
}有一个Vector ht,里面放类M的实例M1...Mj...Mn,其中 Mj.getList返回的是一个Vector,里面放的也是M1...Mi...Mm.
现在想实现 ht 中对象M 按order 升序排序,包括Mj.getList返回的Vector中的M也是升序排.
private Vector list = null;
private int order;public Vector getList() {
return list;
}public void setList(Vector list) {
this.list = list;
}
public int getOrder() {
return order;
}public void setOrder(int order) {
this.order = order;
}
}有一个Vector ht,里面放类M的实例M1...Mj...Mn,其中 Mj.getList返回的是一个Vector,里面放的也是M1...Mi...Mm.
现在想实现 ht 中对象M 按order 升序排序,包括Mj.getList返回的Vector中的M也是升序排.
前段时间看到一个对list中的实体bean某个字段的排序方法,因为用不到,就忘了,惭愧惭愧
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/public class CompareClass implements Comparable{
private Vector list = null;
private int order;
public CompareClass() {
}
public int compareTo(Object o){
int result = 0;
if(o instanceof CompareClass){
CompareClass cc = (CompareClass)o;
if(this.order > cc.order){
result = 1;
}else if(this.order < cc.order){
result = -1;
}else if(this.order == cc.order){
result = 0;
}
}
return result;
}
public void orderList(){
Vector tempV = new Vector();
for(int i=0;i<this.list.size();i++){
int pos = 0;
for(int j=0;j<this.list.size();j++){
if(((CompareClass)list.elementAt(pos)).compareTo((CompareClass)list.elementAt(j)) <= 0){
continue;
}else{
pos = j;
continue;
}
}
tempV.addElement(list.elementAt(pos));
list.removeElementAt(pos);
}
setList(tempV);
}
public Vector getList() {
return list;
}
public void setList(Vector list) {
this.list = list;
}
public int getOrder() {
return order;
}
public void setOrder(int order) {
this.order = order;
}
}
写的不好,忽略了Exception的情况
orderList();
return list;
}这个里面加上orderList();
public Vector getList() {
orderList();
return list;
}这个里面加上orderList();
????
import java.util.Vector;public class Test { public Test() {
M m1 = new M();
m1.order = 1;
M m2 = new M();
m2.order = 2;
// ...... TreeMap tm = new TreeMap();
tm.put(String.valueOf(m1.order), m1);
tm.put(String.valueOf(m2.order), m2);
// ...... int s = tm.size();
for (int i = 0; i < s; i++) {
String key = (String) tm.firstKey();
M m = (M)tm.get(key);
// ......取出排序后的M,处理 tm.remove(key);
}
} public class M {
private Vector list = null; private int order; public Vector getList() {
return list;
} public void setList(Vector list) {
this.list = list;
} public int getOrder() {
return order;
} public void setOrder(int order) {
this.order = order;
}
}}
tm.put(String.valueOf(m1.order), m1);
tm.put(String.valueOf(m2.order), m2);
// ...... int s = tm.size();
for (int i = 0; i < s; i++) {
String key = (String) tm.firstKey();
M m = (M)tm.get(key);
// ......取出排序后的M,处理 tm.remove(key);
}
看你自己的情况了,如果你要一次排序完,那么重载orderList(CompareClass c)
tempV.addElement(list.elementAt(pos));
list.removeElementAt(pos);
Vector ht
M1--->getlist Vector ht2 含有M1....
M2 Mn ....
M3
.
.
Mn--->
for (Iterator iter = ver.iterator(); iter.hasNext();) {
M m = (M) iter.next();
if (m.getList() != null) {
Collections.sort(m.getList(), new Comparator() {
public int compare(Object o1, Object o2) {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.getOrder() - m2.getOrder();
}
});
sort(m.getList());
}
}
Collections.sort(ver, new Comparator() {
public int compare(Object o1, Object o2) {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.getOrder() - m2.getOrder();
}
});
}
------------------------------------------------------------------
递归一下不是都解决了嘛,代码还有什么问题
if (list == null || list.size() == 0) {
return;
}
sortList(list, order);
for (Object o : list) {
if (o != null && o instanceof List) {
List subList = (List) o;
recursiveSort(subList, order);
}
}
} public void sortList(List list, int order) {
//to be implemented
}
for (Iterator iter = ver.iterator(); iter.hasNext();) {
M m = (M) iter.next();
if (m.getList() != null) {
Collections.sort(m.getList(), new Comparator() {
public int compare(Object o1, Object o2) {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.getOrder() - m2.getOrder();
}
});
sort(m.getList());
}
}
Collections.sort(ver, new Comparator() {
public int compare(Object o1, Object o2) {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.getOrder() - m2.getOrder();
}
});
}
---------------------------------
递归排序,还有什么问题
for (Iterator iter = ver.iterator(); iter.hasNext();) {
M m = (M) iter.next();
if (m.getList() != null) {
Collections.sort(m.getList(), new Comparator() {
public int compare(Object o1, Object o2) {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.getOrder() - m2.getOrder();
}
});
sort(m.getList());
}
}
Collections.sort(ver, new Comparator() {
public int compare(Object o1, Object o2) {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.getOrder() - m2.getOrder();
}
});
}
---------------------------------
递归排序,还有什么问题public void sort(Vector ver) 返回值是个void,要返回一个排序后的Vector.
Vector。
测试:
public static void main(String args[]) {
Vector ver1 = new Vector();
Vector ver2 = new Vector();
Vector ver3 = new Vector();
M m41 = new M();
m41.setOrder(4);
M m42 = new M();
m42.setOrder(3);
M m43 = new M();
m43.setOrder(2);
M m44 = new M();
m44.setOrder(1);
ver3.add(m41);
ver3.add(m42);
ver3.add(m43);
ver3.add(m44);
M m31 = new M();
m31.setOrder(2);
m31.setList(ver3);
ver2.add(m31);
M m32 = new M();
m32.setOrder(1);
m32.setList(new Vector(ver3));
ver2.add(m32);
M m21 = new M();
m21.setOrder(2);
m21.setList(ver2);
ver1.add(m21);
M m22 = new M();
m22.setOrder(1);
m22.setList(new Vector(ver2));
ver1.add(m22);
sort(ver1);
System.out.println(printStr(ver1));
}
public static String printStr(Vector ver) {
String str = "";
for (Iterator iter = ver.iterator(); iter.hasNext();) {
M m = (M) iter.next();
if (m.getList() != null) {
str = str +":"+m.getOrder()+ "->["+printStr(m.getList())+"]";
}
if(m.getList()==null){
str = str +":"+m.getOrder();
}
}
return str;
}
public static void sort(Vector ver) {
for (Iterator iter = ver.iterator(); iter.hasNext();) {
M m = (M) iter.next();
if (m.getList() != null) {
Collections.sort(m.getList(), new Comparator() {
public int compare(Object o1, Object o2) {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.getOrder() - m2.getOrder();
}
});
sort(m.getList());
}
}
Collections.sort(ver, new Comparator() {
public int compare(Object o1, Object o2) {
M m1 = (M) o1;
M m2 = (M) o2;
return m1.getOrder() - m2.getOrder();
}
});
}