made hashtable in roster store jids instead of strings

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/Roster.java | 16 +++-----
1 file changed, 7 insertions(+), 9 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Roster.java 🔗

@@ -9,7 +9,7 @@ import eu.siacs.conversations.xmpp.jid.Jid;
 
 public class Roster {
 	final Account account;
-	final HashMap<String, Contact> contacts = new HashMap<>();
+	final HashMap<Jid, Contact> contacts = new HashMap<>();
 	private String version = null;
 
 	public Roster(Account account) {
@@ -21,7 +21,7 @@ public class Roster {
 			return null;
 		}
 		synchronized (this.contacts) {
-			Contact contact = contacts.get(jid.toBareJid().toString());
+			Contact contact = contacts.get(jid.toBareJid());
 			if (contact != null && contact.showInRoster()) {
 				return contact;
 			} else {
@@ -32,15 +32,13 @@ public class Roster {
 
 	public Contact getContact(final Jid jid) {
 		synchronized (this.contacts) {
-			final Jid bareJid = jid.toBareJid();
-			if (contacts.containsKey(bareJid.toString())) {
-				return contacts.get(bareJid.toString());
-			} else {
-				Contact contact = new Contact(bareJid);
+			if (!contacts.containsKey(jid.toBareJid())) {
+				Contact contact = new Contact(jid.toBareJid());
 				contact.setAccount(account);
-				contacts.put(bareJid.toString(), contact);
+				contacts.put(contact.getJid().toBareJid(), contact);
 				return contact;
 			}
+			return contacts.get(jid.toBareJid());
 		}
 	}
 
@@ -80,7 +78,7 @@ public class Roster {
 		contact.setAccount(account);
 		contact.setOption(Contact.Options.IN_ROSTER);
 		synchronized (this.contacts) {
-			contacts.put(contact.getJid().toBareJid().toString(), contact);
+			contacts.put(contact.getJid().toBareJid(), contact);
 		}
 	}