最近学信息可视化这门课时用processing(其编程语言实质就是java)进行编程遇到一个问题:我需要读进来10多万条数据,每一条数据组成一个Node对象,如何从中根据某一个属性读取该最大的前100个对象。
关于里面涉及的排序这个问题,很自然的我们可以用到java自带的排序方法。另一个需要解决的是如何根据数组对象进行排序。
对此,我的想法如下:先读进来前100组数据,存入对象数组中并根据其中一个属性从小大大排序,从后面开始,每次读一组数据,比较第一个数组和这个数据的大小,如果这个数据大于数组top[0],替换,在此排序,如此循环下去。
代码如下,用java实现,还是比较容易的
void insertIpAct(int uid, long destip, String time,long send, long recv,String tdip) {
if(count<100){
Node node= new Node(uid,destip,time,send,recv,tdip);
top[count]=node;
count++;
} else {
Arrays.sort(top);
Node tempnode=top[0];
if(send>tempnode.sendSize){
Node node1= new Node(uid,destip,time,send,recv,tdip);
top[0]=node1;
}
}
return;
}
Node类代码
class Node implements Comparable{
int uid;
long destIp;
String accessTime;
long sendSize;
long recvSize;
String dIp;
Node(int uid,long destIp, String accessTime,long sendSize, long recvSize,String dIp){
this.uid=uid;
this.destIp=destIp;
this.accessTime=accessTime;
this.sendSize=sendSize;
this.recvSize=recvSize;
this.dIp=dIp;
}
public int compareTo(Object object){
Node other=(Node) object;
if(this.sendSize==other.sendSize)
return 0;
if(this.sendSize>other.sendSize)
return 1;
return -1;
}
}
其实就是在这个类中implements Comparable,并在其中重写compareTo,这样就可以直接调用java下的Arrays.sort方法了,其实就这们简单。另外
如何读入.csv文件还是比较容易实现的,所以就没有给出代码,以上只是展示了本文所要讨论的最核心的部分。