求一个小小的算法

n5u99 2011-05-18 02:19:35
求一个小算法。
用户角色ID 角色对应权限数数量
1 47
2 22
3 6
4 17
5 33
. .
. .
. .
. .


根据角色对应的权限数量的多少来给角色排个序
比如角色1,它有47个权限,那么角色1当然最大,然后角色5,有33个权限,那么它就排在老二。角色2有22个权限,那么它是老三。
通过对权限数量的排序给角色ID排个序,我再根据角色ID查出角色中文名返回给前台,让用户对哪个角色的权力大有个印象。
我想了一会还真没什么好办法,不知道CSDN的大神们有没有高招。拜谢。
...全文
121 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2011-05-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 n5u99 的回复:]

5楼和7楼的都不错。7楼在算法上可能更考究些
但是5楼的写法比较“Java”,我非常喜欢。
总之谢谢大家了,我也不为别的,就是交流一下。
[/Quote]
我的看法正好相反,尽量使用Comparator而不是Comparable。有点类似设计模式“Composition VS inheritance”
n5u99 2011-05-20
  • 打赏
  • 举报
回复
5楼和7楼的都不错。7楼在算法上可能更考究些
但是5楼的写法比较“Java”,我非常喜欢。
总之谢谢大家了,我也不为别的,就是交流一下。
mtv0199 2011-05-18
  • 打赏
  • 举报
回复
以前写的一个类,给你吧。
public class OrderBy<T> implements Comparator<T>{

private String fieldName ="";


public String getArgs() {
return fieldName;
}

public void setArgs(String args) {
this.fieldName = args;
}

public OrderBy(String str){

fieldName = str;
}

public OrderBy(){
System.out.println("OrderBy done...");
}


public int compare(T o1, T o2) {
// TODO Auto-generated method stub
System.out.println("compare done...");
Object obj1 = this.invokeMethod(o1, fieldName, new Object[0]);
Object obj2 = this.invokeMethod(o2, fieldName, new Object[0]);
System.out.println(obj1.toString() + " " + obj2.toString());
if(obj1 == null || obj2 == null){
return 0;
}else{
return obj1.toString().compareTo(obj2.toString());
}
}



@SuppressWarnings("unchecked")
private Object invokeMethod(T obj,String methodName, Object[] args){
Object object = null;
@SuppressWarnings("rawtypes")
Class ownerClass = obj.getClass();
@SuppressWarnings("rawtypes")
Class[] argsClass = new Class[args.length];
for(int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method;
try {
methodName = "get" + methodName;
method = ownerClass.getMethod(methodName, argsClass);
object = method.invoke(obj, args);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
}
return object;
}

}

可对类的字段进行排序,返回一个list。注意传入的str是你要排序的属性,get +str等于你的get方法的名字。例如根据你的id排序,对应的get方法为getId,所以要传入Id,这样写OrederBy<User> ob = new OrederBy<User>("Id")。这样使用Collections.sort(list, ob);其中list是你需要排序的列表。
shine333 2011-05-18
  • 打赏
  • 举报
回复
典型的数据库应用。不知何故一定要java?
leebeen34 2011-05-18
  • 打赏
  • 举报
回复
楼主用可以用两个数组

int i;
int j;
int t;
//角色对应权限数数量
int[] a={47,22,6,17,33};
//用户角色ID
int[] b={1,2,3,4,5};
for(i=0;i<a.length-1;i++)
{
for(j=i+1;j<a.length;j++)
{
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
for(i=0;i<a.length;i++)
{
System.out.println(a[i]+" "+b[i]);
}
wl_ldy 2011-05-18
  • 打赏
  • 举报
回复
5楼写的很清楚啊。。。
magong 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 n5u99 的回复:]

呵呵,2楼的兄弟说的很对,数据库里加个order by就完事了。
但是我要是就用java排呢?因为我感觉不是很复杂,但是自己却没想出来感觉不舒服。就是想研究一下。
[/Quote]
LZ做个参考吧

public class MapSorttingDemo {
public static void main(String[] args) {
List roles = new ArrayList();
roles.add(new Role(1, 47));
roles.add(new Role(2, 22));
roles.add(new Role(3, 6));
roles.add(new Role(4, 17));
roles.add(new Role(5, 33));
Collections.sort(roles); //排序
for ( Object r : roles)
System.out.println(((Role)r).getId());
}
}
class Role implements Comparable{
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
private int weight;
public Role (int id, int weight){
this.id = id;
this.weight = weight;
}
@Override
public int compareTo(Object o) { //根据权重排序
return Integer.signum(((Role)o).weight - weight);
}
}
n5u99 2011-05-18
  • 打赏
  • 举报
回复
呵呵,2楼的兄弟说的很对,数据库里加个order by就完事了。
但是我要是就用java排呢?因为我感觉不是很复杂,但是自己却没想出来感觉不舒服。就是想研究一下。
keeya0416 2011-05-18
  • 打赏
  • 举报
回复
你把角色ID放到一个数组
角色的权限也放大另一个数组
这2个数组长度一样,同一个索引下存的是 角色ID 和 权限
给权限排序的时候 角色ID对应的索引也跟着同步变化不就可以了
magong 2011-05-18
  • 打赏
  • 举报
回复
用数据库啊楼主。
n5u99 2011-05-18
  • 打赏
  • 举报
回复
图标发布之后好像有点变形,重新发一下

用户角色ID 角色对应权限数数量
1 47
2 22
3 6
4 17
5 33
. .
. .
. .
. .

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧