⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btalgorithmpeerselectionattracker.java

📁 一个p2p仿真软件
💻 JAVA
字号:
/*
 * @(#)BTAlgorithmPeerSelectionAtTracker.java	ver 1.2  6/20/2005
 *
 * Copyright 2005 Weishuai Yang (wyang@cs.binghamton.edu). 
 * All rights reserved.
 * 
 */

package gps.protocol.BT.algorithm;
import gps.Simulator;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;


/**
 * bt tracker select peer list to respond GET request from peer
 * 
 * @author  Weishuai Yang
 * @version 1.2,  6/20/2005
 */

public class BTAlgorithmPeerSelectionAtTracker {
	/**
	 * default peer number in peer list
	 */
	public static int DEFAULT_PEER_NUM_LIMIT=50;
	/**
	 * peer number in peer list
	 */
	protected int peerNumLimit=DEFAULT_PEER_NUM_LIMIT;
	
	/**
	 * random number generator
	 */
	protected Random rand=null;
	
	/**
	 * constructs peer selection algorithm object
	  * @param n seed for random object
	 */
	public BTAlgorithmPeerSelectionAtTracker(int n){
		rand=new Random(n+Integer.parseInt(Simulator.getInstance().getProperties().getProperty("RandomSeed")));
	}
	
	/**
	 * selects peers having documents from trackers database
	 * @param list trackers database records for this document
	 * @return peer list
	 */
	public ArrayList selectPeers(List list){
		//this algorithm simply randomly select peerNumLimit of nodes.
		
		ArrayList listClone=null;

		if(list.size()<=peerNumLimit){
			listClone=new ArrayList(list);
			listClone.trimToSize();
			return listClone;
		}
		
	 	int index=0;
		
		
		//for performance, different treatment for list size between 
		//peerNumLimit and 2*peerNumLimit
		
		if(list.size()<2*peerNumLimit){
			//remove list.size-peerNumLimit;
			listClone=new ArrayList(list);
			while(listClone.size()>peerNumLimit){
				index=rand.nextInt()%listClone.size();
				if(index<0) index=-index;
				listClone.remove(index);
			}
		}
		
		else {
			//adding and increase to peerNumLimit
			listClone=new ArrayList(peerNumLimit);
			while(listClone.size()<peerNumLimit){
				index=rand.nextInt()%list.size();
				if(index<0) index=-index;
				listClone.add(list.get(index));
			}
	 	}



		//another way may be use Collections.shuffle();

		return listClone;
	 } 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -