第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何提高數(shù)組列表的獲取速度?

如何提高數(shù)組列表的獲取速度?

守著星空守著你 2022-06-15 17:18:18
我正在使用 anArraylist來獲取我的應(yīng)用程序中的所有可用聯(lián)系人。這效率不高,因為幾乎Arraylist需要很長時間才能獲取和填充.Listview600+ contacts我正在尋找一種性能更好的替代方法。雖然我搜索了其他相關(guān)問題,但我找不到方便的問題。這是我的java代碼:private List<String> getContactList() {      List<String> stringList=new ArrayList<>();      ContentResolver cr = context.getContentResolver();      Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,        null, null, null, null);      if ((cur != null ? cur.getCount() : 0) > 0) {        while (cur != null && cur.moveToNext()) {          String id = cur.getString(            cur.getColumnIndex(ContactsContract.Contacts._ID));            String name = cur.getString(cur.getColumnIndex(            ContactsContract.Contacts.DISPLAY_NAME)          );          if (cur.getInt(cur.getColumnIndex(            ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0) {              Cursor pCur = cr.query(                                  ContactsContract.CommonDataKinds.Phone.CONTENT_URI,                null,                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",                  new String[]{id}, null               );               while (pCur.moveToNext()) {                 String phoneNo = pCur.getString(pCur.getColumnIndex(                 ContactsContract.CommonDataKinds.Phone.NUMBER));                                   Log.v("Data : ",""+id+" "+name+" "+phoneNo);                 stringList.add(id);                 stringList.add(name);                 stringList.add(phoneNo);               }               pCur.close();             }            }          }          if(cur!=null){            cur.close();          }          return stringList;        }   
查看完整描述

3 回答

?
不負(fù)相思意

TA貢獻1777條經(jīng)驗 獲得超10個贊

您的查詢效率低下,您目前正在為每個聯(lián)系人執(zhí)行一個非常慢的查詢,您可以通過一個大查詢(非常快)獲得所有信息:


String[] projection = new String[] { Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER };

Cursor c = cr.query(Phone.CONTENT_URI, projection, null, null, null);

while (c.moveToNext()) {

   long contactId = c.getLong(0);

   String name = c.getString(1);

   String phone = c.getString(2);

   Log.i("Phones", "got contact phone: " + contactId + " - " + name + " - " + phone);

}

c.close();


查看完整回答
反對 回復(fù) 2022-06-15
?
30秒到達戰(zhàn)場

TA貢獻1828條經(jīng)驗 獲得超6個贊

您可以考慮使用該Paging庫:https ://developer.android.com/topic/libraries/architecture/paging/

它的設(shè)計理念是列表僅顯示一定數(shù)量的項目,因此實際上無需加載超出其可能顯示的方式。例如,一個 ListView 可能只顯示 10 個聯(lián)系人,因此無需獲取 600 個聯(lián)系人。

相反,當(dāng)用戶滾動時,分頁庫將獲取更少量的數(shù)據(jù),從而消除 600 個聯(lián)系人的加載時間、600 個聯(lián)系人的內(nèi)存等等......從而提高效率。


查看完整回答
反對 回復(fù) 2022-06-15
?
滄海一幻覺

TA貢獻1824條經(jīng)驗 獲得超5個贊

如果您擔(dān)心速度,我會嘗試使用 Set,盡管 ArrayList 中有 600 多個聯(lián)系人應(yīng)該不成問題。當(dāng)數(shù)據(jù)集達到數(shù)百萬甚至更多時,它就會成為一個問題。我會嘗試查看您的代碼中的任何其他低效之處。

就 Set 而言,最常見的兩種 Java 數(shù)據(jù)結(jié)構(gòu)是 HashSet 和 TreeSet。TreeSet 如果你想對集合進行排序。HashSet 稍微快一點,但是你失去了排序。兩者都有 O(1) 訪問時間。


查看完整回答
反對 回復(fù) 2022-06-15
  • 3 回答
  • 0 關(guān)注
  • 290 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號