IM即时聊天消息怎么按时间来排序
最近在做一个IM的即时通讯的项目,现在有遇到一个问题是需要把每次收到的消息(单聊,群聊,**)都排到最前面,类似于手机QQ收到消息的效果
我用了三个hashmap来保存三种不同类型的消息 主要是做本次缓存,加载速度快。
三个hashmap的结构如下
//用户消息 String - user_username //(key:用户名 value:该用户与不同好友的聊天记录)
//用户消息 String - user_username
public static HashMap> userMessages = new HashMap>();
//群组消息 String - group_gid
public static HashMap> groupMessages = new HashMap>();
//系统转发的请求 String - sys_msgtype
public static HashMap> sysMessages = new HashMap>();
我目前想的一个办法是用linkedlist来存储所有的消息,不管是**还是单聊或群聊的消息。然后当有新消息到来的时候就会去查询是否这个messages对象是否已经存在,如果存在删除, 然后通过addFirst()方法将他添加到表头,这样最近来的消息就排到置顶了。不过这种方式的效率很低,今天想了很久没有想到更好的办法,如果有大家有更好的办法请帮个忙,谢谢了。
附上代码
/**
* 保存单聊消息
* @param name 聊天好友的名字 作为key
* @param message 消息对象
*/
public void saveSingleMsg(String name, ChatMessage message) {
ArrayList messages = AppData.userMessages.get("user_"+name);
//如果此用户对应的消息集合不存在就创建一个新的
if (messages == null) {
messages = new ArrayList();
}
messages.add(message);
//保存单聊消息 根据用户名来保存消息
AppData.userMessages.put("user_" +name, messages);
if(mLinkedList.contains(messages)){
mLinkedList.remove(messages);
}
mLinkedList.addFirst(messages);
}
我用了三个hashmap来保存三种不同类型的消息 主要是做本次缓存,加载速度快。
三个hashmap的结构如下
//用户消息 String - user_username //(key:用户名 value:该用户与不同好友的聊天记录)
//用户消息 String - user_username
public static HashMap
//群组消息 String - group_gid
public static HashMap
//系统转发的请求 String - sys_msgtype
public static HashMap
我目前想的一个办法是用linkedlist来存储所有的消息,不管是**还是单聊或群聊的消息。然后当有新消息到来的时候就会去查询是否这个messages对象是否已经存在,如果存在删除, 然后通过addFirst()方法将他添加到表头,这样最近来的消息就排到置顶了。不过这种方式的效率很低,今天想了很久没有想到更好的办法,如果有大家有更好的办法请帮个忙,谢谢了。
附上代码
/**
* 保存单聊消息
* @param name 聊天好友的名字 作为key
* @param message 消息对象
*/
public void saveSingleMsg(String name, ChatMessage message) {
ArrayList
//如果此用户对应的消息集合不存在就创建一个新的
if (messages == null) {
messages = new ArrayList
}
messages.add(message);
//保存单聊消息 根据用户名来保存消息
AppData.userMessages.put("user_" +name, messages);
if(mLinkedList.contains(messages)){
mLinkedList.remove(messages);
}
mLinkedList.addFirst(messages);
}
没有找到相关结果
已邀请:
2 个回复
zhangnan
邂逅潇湘