java用户存储,Java学习笔记——自己的类(用户存储)

前言:哎,说来话长,那个地图编辑器做不下去了,自己也很懒,那书也看了才一半。前几天又开始了新的历程,想做一个IM软件出来,如今服务器和客户端是基本做好了,就等了进一步的改进。这里先贴一个用于储存在线用户的类,当然也提供基本的获取添加的方法。还没试验过。

里面包含一个内部类。内部类包括名称,标识号码,用户自己连接成功的socket,双人聊天客户端数组等等的数据区域。名称当然是用户的昵称了,标识号码就是唯一的一个userID,连接成功的socket就是客户端socket的referrence,而双人聊天客户端只是一个设想。现在是基于聊天室。外部的基本类里面定义了一个内部类的数组,一个PrintStream的数组,这个是和UserData一一对应的,而把它独立出来纯粹为了方便全发的速度。剩下的也就是当前数组下标和最大人数以及当前用户数量了。其他的一些方法不一一列举了,主要就是增加用户,删除用户,查找用户这些基本操作。

现在讲讲主要的操作流程。当一个客户端和服务器建立连接后,首先查询数据库,看用户ID和密码是否匹配。如果是就把相关的数据储存到userDataList中,已当前current指针下标添加,添加一个current自加一。实际用户数量也自加一。当客户端离开后,首先用该用户的userID在userDataList中查找,并返回相应的数组下标,然后删除,用户数量自动减一,注意,current并不减一,它永远代表最后一个数据的数组下标。当部分用户登陆几次退出后,肯定会造成userDataList的current为最大数组下标,也就是说不能再添加用户了。这个时候如果没有用户离开过,那么这个数组是完全真实填满的。如果有用户推出,那么数组中间就有空闲,不是被数据填满的,还有位置可以添加。但是添加永远是对current+1做数据存放的,所以就分两种情况:1.真实填满,数组扩容。2.虚假填满,整理数组为无空隙且紧密排列,这样就能在current后空出位置添加用户。需要注意的是,扩容和整理数组都非常耗时。相对来说整理的耗费的时间小于扩容。

0818b9ca8b590ca3270a3433284dd417.png

import

java.io.PrintStream;

0818b9ca8b590ca3270a3433284dd417.png

import

java.net.Socket;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

/** */

/**0818b9ca8b590ca3270a3433284dd417.png *

0818b9ca8b590ca3270a3433284dd417.png *    用户列表数据结构

0818b9ca8b590ca3270a3433284dd417.png *    做了线程同步 synchronized

0818b9ca8b590ca3270a3433284dd417.png *

0818b9ca8b590ca3270a3433284dd417.png *

0818b9ca8b590ca3270a3433284dd417.png*/

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

public

class

UserListData

...

{

0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png//在线用户列表0818b9ca8b590ca3270a3433284dd417.pngprivateUserData[] userDataList=null;

0818b9ca8b590ca3270a3433284dd417.png//记录在线用户所有输出,方便群发0818b9ca8b590ca3270a3433284dd417.pngprivatePrintStream[] toClientOut=null;

0818b9ca8b590ca3270a3433284dd417.png//指明当前的数组下标0818b9ca8b590ca3270a3433284dd417.pngprivateintcurrent=-1;

0818b9ca8b590ca3270a3433284dd417.png//指明当前实际在线用户数量0818b9ca8b590ca3270a3433284dd417.pngprivateintcurrentUserNo=0;

0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.pngprivateintmaxUsr=0;

0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    UserData:内部类,定义了单个用户的信息

0818b9ca8b590ca3270a3433284dd417.png     *    property:

0818b9ca8b590ca3270a3433284dd417.png     *        名称,标识号码,用户自己连接成功的socket,双人聊天客户端数组

0818b9ca8b590ca3270a3433284dd417.png     *    Method:

0818b9ca8b590ca3270a3433284dd417.png     *        添加双人聊天客户端

0818b9ca8b590ca3270a3433284dd417.png     *        移除双人聊天客户端

0818b9ca8b590ca3270a3433284dd417.png     *        调整方法暂且不用

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngclassUserData...{

0818b9ca8b590ca3270a3433284dd417.png        String name=null;//记录用户的名称0818b9ca8b590ca3270a3433284dd417.pnglonguserID=0;//记录用户唯一一个标记数字0818b9ca8b590ca3270a3433284dd417.pngSocket clientSoc=null;//用户的socket0818b9ca8b590ca3270a3433284dd417.png0818b9ca8b590ca3270a3433284dd417.png        Socket[] toTalkClientSocArr=null;//正在和用户双人交谈的数组0818b9ca8b590ca3270a3433284dd417.pnglong[] toTalkClientID=null;//对应的userID0818b9ca8b590ca3270a3433284dd417.pngprivateintcurrent=0;//交谈中的人在数组中的下标0818b9ca8b590ca3270a3433284dd417.pngprivateintcurrentNo=0;//记录双人交谈的人数0818b9ca8b590ca3270a3433284dd417.png0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicUserData (String name,longid, Socket soc)...{

0818b9ca8b590ca3270a3433284dd417.pngthis.name=name;

0818b9ca8b590ca3270a3433284dd417.pngthis.userID=id;

0818b9ca8b590ca3270a3433284dd417.pngthis.clientSoc=soc;

0818b9ca8b590ca3270a3433284dd417.png//设定最多一个人只能和20个人双人对话0818b9ca8b590ca3270a3433284dd417.pngtoTalkClientSocArr=newSocket[20];

0818b9ca8b590ca3270a3433284dd417.png            toTalkClientID=newlong[20];

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/**//*初始化

0818b9ca8b590ca3270a3433284dd417.png            for (int i = 0; i<20; i++) {

0818b9ca8b590ca3270a3433284dd417.png                toTalkClientSocArr[i] = null;

0818b9ca8b590ca3270a3433284dd417.png            }

0818b9ca8b590ca3270a3433284dd417.png            //*/0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png        

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicUserData (String name,longid, Socket soc,intnum)...{

0818b9ca8b590ca3270a3433284dd417.pngthis.name=name;

0818b9ca8b590ca3270a3433284dd417.pngthis.userID=id;

0818b9ca8b590ca3270a3433284dd417.pngthis.clientSoc=soc;

0818b9ca8b590ca3270a3433284dd417.png            

0818b9ca8b590ca3270a3433284dd417.png            toTalkClientSocArr=newSocket[num];

0818b9ca8b590ca3270a3433284dd417.png            toTalkClientID=newlong[num];

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/**//*初始化

0818b9ca8b590ca3270a3433284dd417.png            for (int i = 0; i

0818b9ca8b590ca3270a3433284dd417.png                toTalkClientSocArr[i] = null;

0818b9ca8b590ca3270a3433284dd417.png            }

0818b9ca8b590ca3270a3433284dd417.png            //*/0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png        

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicsynchronizedbooleanaddTalkClient (Socket soc,longid)...{

0818b9ca8b590ca3270a3433284dd417.png//判断是否超出长度0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(toTalkClientSocArr.length<20)...{

0818b9ca8b590ca3270a3433284dd417.png//0开始数组下标,后自加0818b9ca8b590ca3270a3433284dd417.pngtoTalkClientSocArr[current++]=soc;

0818b9ca8b590ca3270a3433284dd417.png                toTalkClientID[current-1]=id;

0818b9ca8b590ca3270a3433284dd417.png                currentNo++;

0818b9ca8b590ca3270a3433284dd417.pngreturntrue;

0818b9ca8b590ca3270a3433284dd417.png            }0818b9ca8b590ca3270a3433284dd417.pngreturnfalse;

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png        

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicsynchronizedbooleanremoveTalkClient (intindex)...{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(toTalkClientSocArr.length

0818b9ca8b590ca3270a3433284dd417.pngreturnfalse;

0818b9ca8b590ca3270a3433284dd417.png            }0818b9ca8b590ca3270a3433284dd417.png//移除0818b9ca8b590ca3270a3433284dd417.pngtoTalkClientSocArr[index]=null;

0818b9ca8b590ca3270a3433284dd417.png            toTalkClientID[index]=0;

0818b9ca8b590ca3270a3433284dd417.png//客户数目减少0818b9ca8b590ca3270a3433284dd417.pngcurrentNo--;

0818b9ca8b590ca3270a3433284dd417.png//把current移动到最后一个非null数据上

0818b9ca8b590ca3270a3433284dd417.png//如果刚好删除的是最后一个数据0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(index==current)...{

0818b9ca8b590ca3270a3433284dd417.png//判断当当前数据为空且不是数组首位时自减1,并判再判断是否为空或者到首位0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngwhile(toTalkClientSocArr[current]==null&&current!=0)...{

0818b9ca8b590ca3270a3433284dd417.png                    current--;

0818b9ca8b590ca3270a3433284dd417.png                }0818b9ca8b590ca3270a3433284dd417.png            }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngelse...{

0818b9ca8b590ca3270a3433284dd417.png//不是当前被删除,那么直接自减,后有排列方法0818b9ca8b590ca3270a3433284dd417.pngcurrent--;

0818b9ca8b590ca3270a3433284dd417.png            }0818b9ca8b590ca3270a3433284dd417.pngreturntrue;

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png        

0818b9ca8b590ca3270a3433284dd417.png//整理成没有空隙(null)的数组,重新调整后可能会改变当初插入的位置0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicsynchronizedSocket[] coordinateTalkClientSocArr()...{

0818b9ca8b590ca3270a3433284dd417.png            Socket[] newArr=newSocket[toTalkClientSocArr.length];

0818b9ca8b590ca3270a3433284dd417.pngintj=0;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngfor(inti=0; i

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(toTalkClientSocArr[i]!=null)...{

0818b9ca8b590ca3270a3433284dd417.png                    newArr[j++]=toTalkClientSocArr[i];

0818b9ca8b590ca3270a3433284dd417.png                }0818b9ca8b590ca3270a3433284dd417.png            }0818b9ca8b590ca3270a3433284dd417.png            current=j-1;//移到末尾0818b9ca8b590ca3270a3433284dd417.pngtoTalkClientSocArr=newArr;

0818b9ca8b590ca3270a3433284dd417.pngreturntoTalkClientSocArr;

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png        

0818b9ca8b590ca3270a3433284dd417.png//返回当前数组下标0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicintgetCurrent ()...{

0818b9ca8b590ca3270a3433284dd417.pngreturnthis.current;

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png        

0818b9ca8b590ca3270a3433284dd417.png//返回该用户当前双人聊天的数目0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicintgetTalkClientNo ()...{

0818b9ca8b590ca3270a3433284dd417.pngreturnthis.currentNo;

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png         * Method getUserID

0818b9ca8b590ca3270a3433284dd417.png         *

0818b9ca8b590ca3270a3433284dd417.png         *

0818b9ca8b590ca3270a3433284dd417.png         *@return0818b9ca8b590ca3270a3433284dd417.png         *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpubliclonggetUserID()...{

0818b9ca8b590ca3270a3433284dd417.png//TODO: 在这添加你的代码0818b9ca8b590ca3270a3433284dd417.pngreturnthis.userID;

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png         * Method searchTalkClient

0818b9ca8b590ca3270a3433284dd417.png         *

0818b9ca8b590ca3270a3433284dd417.png         *

0818b9ca8b590ca3270a3433284dd417.png         *@paramid

0818b9ca8b590ca3270a3433284dd417.png         *

0818b9ca8b590ca3270a3433284dd417.png         *@return0818b9ca8b590ca3270a3433284dd417.png         *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicintsearchTalkClient(longid)...{

0818b9ca8b590ca3270a3433284dd417.png//TODO: 在这添加你的代码0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngfor(inti=0; i

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(id==toTalkClientID[i])...{

0818b9ca8b590ca3270a3433284dd417.pngreturni;

0818b9ca8b590ca3270a3433284dd417.png                }0818b9ca8b590ca3270a3433284dd417.png            }0818b9ca8b590ca3270a3433284dd417.pngreturn-1;

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    get name by index

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicString getNameAt (intindex)...{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(index<=userDataList.length)...{

0818b9ca8b590ca3270a3433284dd417.pngreturnuserDataList[index].name;

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.pngreturn"out of length!";

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    返回指定的UserData

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicUserData getUserDataAt (intindex)...{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(index<=userDataList.length)...{

0818b9ca8b590ca3270a3433284dd417.pngreturnuserDataList[index];

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.pngreturnnewUserData("",-1,null);

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    get total user number

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicintgetTotalUserNo ()...{

0818b9ca8b590ca3270a3433284dd417.pngreturncurrentUserNo;

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    get current position

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicintgetCurrentIndex ()...{

0818b9ca8b590ca3270a3433284dd417.pngreturnthis.current;

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    add a name to names[]

0818b9ca8b590ca3270a3433284dd417.png     *    添加一个名字到数组中,如果数组满了就扩容为原来的两倍

0818b9ca8b590ca3270a3433284dd417.png     *    判断方法见文档说明

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicsynchronizedvoidaddUserData (String name,longid, Socket soc, PrintStream out)...{

0818b9ca8b590ca3270a3433284dd417.png//假满,真满,未满0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(current==maxUsr-1&&current>currentUserNo-1)...{

0818b9ca8b590ca3270a3433284dd417.png//数组其实未满,需调整,中间有空隙0818b9ca8b590ca3270a3433284dd417.pngthis.coordinateUserList ();

0818b9ca8b590ca3270a3433284dd417.png//调整后再增加0818b9ca8b590ca3270a3433284dd417.png}0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(currentUserNo==maxUsr)...{

0818b9ca8b590ca3270a3433284dd417.png//数组真实填满并扩大数组两倍原数量0818b9ca8b590ca3270a3433284dd417.pngthis.addMoreUserNo ();

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png//游标指针后移一位0818b9ca8b590ca3270a3433284dd417.pngcurrent++;

0818b9ca8b590ca3270a3433284dd417.png//总数增加一个0818b9ca8b590ca3270a3433284dd417.pngcurrentUserNo++;

0818b9ca8b590ca3270a3433284dd417.png//赋值0818b9ca8b590ca3270a3433284dd417.pnguserDataList[current]=newUserData(name, id, soc);

0818b9ca8b590ca3270a3433284dd417.png        toClientOut[current]=out;

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    append more space to store name

0818b9ca8b590ca3270a3433284dd417.png     *    必须数据容量满了并且没有null后才能调用

0818b9ca8b590ca3270a3433284dd417.png     *    扩容为两倍 maxUsr *= 2;

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicsynchronizedvoidaddMoreUserNo ()...{

0818b9ca8b590ca3270a3433284dd417.png        UserData[] bigArray=null;

0818b9ca8b590ca3270a3433284dd417.png        

0818b9ca8b590ca3270a3433284dd417.png        bigArray=newUserData[maxUsr*2];

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngfor(inti=0; i

0818b9ca8b590ca3270a3433284dd417.png            bigArray[i]=userDataList[i];

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png        userDataList=bigArray;

0818b9ca8b590ca3270a3433284dd417.png        maxUsr*=2;

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    set names to no null element and return it 

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicString[] getNameArray ()...{

0818b9ca8b590ca3270a3433284dd417.png        String[] newStr=null;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(current>currentUserNo-1)...{

0818b9ca8b590ca3270a3433284dd417.pngthis.coordinateUserList();

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png        newStr=newString[currentUserNo];

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngfor(inti=0; i

0818b9ca8b590ca3270a3433284dd417.png            newStr[i]=userDataList[i].name;

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.pngreturnnewStr;

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    整理后current指针被影响,要修改回到正确位置

0818b9ca8b590ca3270a3433284dd417.png     *    所有用户的out也需要被重定向

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicsynchronizedvoidcoordinateUserList()...{

0818b9ca8b590ca3270a3433284dd417.png        UserData[] ud=newUserData[maxUsr];

0818b9ca8b590ca3270a3433284dd417.png        PrintStream[] ps=newPrintStream[maxUsr];

0818b9ca8b590ca3270a3433284dd417.png//整理成数据之间没有null的数组0818b9ca8b590ca3270a3433284dd417.pngintj=0;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngfor(inti=0; i<=current; i++)...{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(userDataList[i]!=null)...{

0818b9ca8b590ca3270a3433284dd417.png                ud[j]=this.userDataList[i];

0818b9ca8b590ca3270a3433284dd417.png                ps[j]=this.toClientOut[i];

0818b9ca8b590ca3270a3433284dd417.png                j++;

0818b9ca8b590ca3270a3433284dd417.png            }0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.png//指针移动到末尾0818b9ca8b590ca3270a3433284dd417.pngcurrent=j-1;

0818b9ca8b590ca3270a3433284dd417.png//重新指向0818b9ca8b590ca3270a3433284dd417.pngthis.userDataList=ud;

0818b9ca8b590ca3270a3433284dd417.pngthis.toClientOut=ps;

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    search a user in the array

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicintsearch(longid)...{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngfor(inti=0; i<=current; i++)...{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(userDataList[i].userID==id)...{

0818b9ca8b590ca3270a3433284dd417.pngreturni;

0818b9ca8b590ca3270a3433284dd417.png            }0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.pngreturn-1;

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    userDataList toClientOut

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicsynchronizedbooleanremoveUserData(intindex)...{

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(index>=current)...{

0818b9ca8b590ca3270a3433284dd417.png            System.out.println ("数组越界......");

0818b9ca8b590ca3270a3433284dd417.pngreturnfalse;

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.pngthis.userDataList[index]=null;

0818b9ca8b590ca3270a3433284dd417.pngthis.toClientOut[index]=null;

0818b9ca8b590ca3270a3433284dd417.pngreturntrue;

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png    

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *    Construction

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicUserListData (intnum)...{

0818b9ca8b590ca3270a3433284dd417.png        userDataList=newUserData[num];

0818b9ca8b590ca3270a3433284dd417.pngthis.maxUsr=num;

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png/** *//**0818b9ca8b590ca3270a3433284dd417.png     * Method getOutPutArr

0818b9ca8b590ca3270a3433284dd417.png     *    得到所有成员的输出句柄

0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png     *@return0818b9ca8b590ca3270a3433284dd417.png     *

0818b9ca8b590ca3270a3433284dd417.png*/0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngpublicPrintStream[] getOutPutArr()...{

0818b9ca8b590ca3270a3433284dd417.png//TODO: 在这添加你的代码0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.pngif(this.current>this.currentUserNo-1)...{

0818b9ca8b590ca3270a3433284dd417.png//数组下标大于现有用户数量,需要调整0818b9ca8b590ca3270a3433284dd417.pngthis.coordinateUserList();

0818b9ca8b590ca3270a3433284dd417.png        }0818b9ca8b590ca3270a3433284dd417.pngreturnthis.toClientOut;

0818b9ca8b590ca3270a3433284dd417.png    }0818b9ca8b590ca3270a3433284dd417.png}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值