JAVA核心技術(shù)總結(jié)(十三章)集合

  1. IteratorListIterator的區(qū)別
    ListIteratoradd()方法,可以向List中添加對(duì)象,而Iterator不能
    ListIteratorIterator都有hasNext()next()方法,可以實(shí)現(xiàn)順序向后遍歷,但是ListIteratorhasPrevious()previous()方法,可以實(shí)現(xiàn)逆向(順序向前)遍歷。Iterator就不可以。
    ListIterator可以定位當(dāng)前的索引位置,nextIndex()previousIndex()可以實(shí)現(xiàn)。Iterator沒有此功能。

  2. ArrayList(變長(zhǎng)數(shù)組)和LinkedList(雙向鏈表也可以當(dāng)做棧使用)都是List的繼承,可以初始化為

List<String> arr = new ArrayList<String>();
//or
List<String> arr = new LinkedList<String>();

并將List<String>作為參數(shù)傳入方法,這樣以后想改變數(shù)據(jù)結(jié)構(gòu)只需要修改初始化的地方即可

  1. HashSetTreeSet都是Set的繼承,可初始化為
Set<String> s = new HashSet<String>();
//or
Set<String> s = new TreeSet<String>();

HashSet是無序的無重復(fù)元素的集合,TreeSet是排序集合,可以在構(gòu)造的時(shí)候傳入比較器,根據(jù)比較器進(jìn)行排序

  1. 隊(duì)列有ArrayDeque(雙端隊(duì)列)和PriorityQueue(優(yōu)先隊(duì)列,高效刪除最小元素),他們繼承的超類不同

  2. 映射表有HashMapTreeMap,前者無序,后者對(duì)鍵進(jìn)行排序,都是Map的繼承,可以初始化為

Map<String,Employee> staff = new TreeMap<String,Employee>();
//or
Map<String,Employee> staff = new HashMap<String,Employee>();

注意Map沒有迭代器

  1. 集合的深拷貝,直接初始化時(shí)拷貝,例如
List<String> lst = new ArrayList<>();
lst.add("a");
lst.add("b");
lst.add("c");
List<String> lst2 = new ArrayList<>(lst);
  1. 數(shù)組的深拷貝
  • 使用循環(huán)結(jié)構(gòu)。這種方法最靈活。唯一不足的地方可能就是代碼較多
  • 使用Object類的clone()方法,這種方法最簡(jiǎn)單,得到原數(shù)組的一個(gè)副本。靈活形也最差。效率最差,尤其是在數(shù)組元素很大或者復(fù)制對(duì)象數(shù)組時(shí)。
  • 使用Systemsarraycopy這種方法被告之速度最快,并且靈活性也較好,可以指定原數(shù)組名稱、以及元素的開始位置、復(fù)制的元素的個(gè)數(shù),目標(biāo)數(shù)組名稱、目標(biāo)數(shù)組的位置。
  1. 數(shù)組和集合的轉(zhuǎn)換
  • 集合轉(zhuǎn)數(shù)據(jù)
    • 一種無參數(shù)返回Object[]
    • 一種帶參數(shù)返回指定類型,注意帶參數(shù)形式中,要指明數(shù)組的大小,如果參數(shù)中new的數(shù)組大小裝不下欲轉(zhuǎn)換的數(shù)組元素,則重新分配一塊空間給轉(zhuǎn)換后的數(shù)組。如果參數(shù)中new的數(shù)組大小大于或等于要轉(zhuǎn)換的數(shù)組大小,則會(huì)返回該數(shù)組,多余的位置用null填充。
List list = new ArrayList();
Object[] objectArray1 = list.toArray();  //無參數(shù)
String[] array1 = list.toArray(new String[list.size()]);  //帶泛型參數(shù)
  • 數(shù)組轉(zhuǎn)集合
Integer[] a = {1,2,3,4};
List<Integer> list = Arrays.asList(a);
//or
List<Integer> list = Arrays.asList(1,2,3,4);
  1. Collections類中包含許多關(guān)于集合的算法,例如
Collections.shuffle(List<T> list);
Collections.sort(List<T> list);
  1. 最好將Collection接口作為通用集合接口傳入方法,這樣增加API的通用性(即可以傳入List,SetMap等),如
void fillMenu(Jmenu menu, Collection<JmenuItem> items)
{
   for (JMenuItem item : Items)
       Menu.add(item);
}

面向接口編程思想

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 以下資料是在學(xué)習(xí)中總結(jié)出來的,希望對(duì)你有所幫助。如果需要請(qǐng)轉(zhuǎn)載,謝謝。 1. StringBuffer 線程安全,...
    尚學(xué)先生閱讀 773評(píng)論 0 1
  • java筆記第一天 == 和 equals ==比較的比較的是兩個(gè)變量的值是否相等,對(duì)于引用型變量表示的是兩個(gè)變量...
    jmychou閱讀 1,648評(píng)論 0 3
  • Collection接口 Collection接口是所有集合的祖先類。他有兩個(gè)構(gòu)造方法,一個(gè)無參構(gòu)造,一個(gè)是帶Co...
    夜幕繁華閱讀 682評(píng)論 0 0
  • 3.3 集合 一方面, 面向?qū)ο笳Z言對(duì)事物的體現(xiàn)都是以對(duì)象的形式,為了方便對(duì)多個(gè)對(duì)象的操作,就要對(duì)對(duì)象進(jìn)行存儲(chǔ)。另...
    閆子揚(yáng)閱讀 838評(píng)論 0 1
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 963評(píng)論 0 1

友情鏈接更多精彩內(nèi)容