java提供了一種可以存數(shù)一組數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),其提供了豐富的方法,在實(shí)際開(kāi)發(fā)中往往比數(shù)組使用的廣泛。這種數(shù)據(jù)結(jié)構(gòu)成為集合:Collection。
Collection是一個(gè)接口,其定義了集合的相關(guān)功能方法。
List接口是Collection的子接口,用于定義線性表數(shù)據(jù)結(jié)構(gòu);
可以將List理解為存放對(duì)象的數(shù)組,只不過(guò)其元素個(gè)數(shù)可以動(dòng)態(tài)的增加或減少。并且List是可重復(fù)集.
List接口的兩個(gè)常見(jiàn)實(shí)現(xiàn)類為ArrayList和LinkedList,分別用動(dòng)態(tài)數(shù)組和鏈表的方式實(shí)現(xiàn)了List接口。
可以認(rèn)為ArrayList和LinkedList的方法在邏輯上完全一樣,只是在性能上有一定的差別,ArrayList更適合于隨機(jī)訪問(wèn)而LinkedList更適合于插入和刪除;在性能要求不是特別苛刻的情形下可以忽略這個(gè)差別。
4.1 List接口——有序集合類 279
4.1.1 add方法——向列表中插入元素 279
List<String> list = new ArrayList<String>(); list.add("java"); list.add("cpp"); list.add("php"); list.add("c#"); list.add("objective-c");
4.1.2 addAll方法——將指定collection添加到列表中 280
List<String> list = new ArrayList<String>(); list.add("java"); list.add("cpp"); list.add("php"); list.add("c#"); list.add("objective-c"); //addAll方法用于將給定集合中的所有元素添加到當(dāng)前集合中 List<String> list2 = new ArrayList<String>(); list2.addAll(list); System.out.PRintln(list2);
4.1.3 clear方法——從列表中移除所有元素 282
4.1.4 contains方法——判斷列表中是否包含指定元素 283
4.1.5 containsAll方法——判斷列表中是否包含指定collection所有元素 283
4.1.6 equals方法——比較指定的對(duì)象與列表是否相等 285
4.1.7 get方法——獲取列表指定位置的元素 285
4.1.8 set方法——替換列表中指定位置的元素 286
List<String> list = new ArrayList<String>(); list.add("java"); list.add("cpp"); list.add("php"); list.add("c#"); list.add("objective-c"); // get方法遍歷List for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } String value = list.set(1, "c++"); System.out.println(value); // cpp System.out.println(list); // [java, c++, php, c#, objective-c] // 交換位置1和3上的元素 list.set(1, list.set(3, list.get(1))); System.out.println(list); // [java, c#, php, c++, objective-c]
4.1.9 hashCode方法——返回列表的哈希碼值 287
4.1.10 indexOf方法——返回第一次出現(xiàn)指定元素的位置 287
4.1.11 lastIndexOf方法——返回最后一次出現(xiàn)指定元素的位置 288
4.1.12 isEmpty方法——判斷集合是否為空 289
4.1.13 iterator方法——返回迭代器 290
4.1.14 listIterator方法——返回列表迭代器 290
Collection提供了一個(gè)遍歷集合的通用方式,迭代器(Iterator)。獲取迭代器的方式是使用Collection定義的方法:
迭代器Iterator是一個(gè)接口,集合在覆蓋Collection的iterator()方法時(shí)提供了迭代器的實(shí)現(xiàn)。
Iterator提供了統(tǒng)一的遍歷集合元素的方式。
迭代器用于遍歷集合的兩個(gè)主要方法:
遍歷集合應(yīng)遵循“先問(wèn)后取”的方式,也就是說(shuō),應(yīng)當(dāng)在確定hasNext()方法的返回值為true的情況下再通過(guò)next()方法取元素。
由此可以看出,使用迭代器遍歷集合是通過(guò)boolean值驅(qū)動(dòng)的,所以它更適合使用while循環(huán)來(lái)遍歷。
Collection<String> c = new HashSet<String>(); c.add("java"); c.add("cpp"); c.add("php"); c.add("c#"); c.add("objective-c"); Iterator<String> it = c.iterator(); while (it.hasNext()) { String str = it.next(); System.out.println(str); }
4.1.15 remove方法——移除列表中的指定元素 292
4.1.16 removeAll方法——從列表中移除指定collection包含的所有元素 293
List<String> list = new ArrayList<String>(); list.add("java"); list.add("c#"); System.out.println(list); // [java, c#] list.add(1, "cpp"); System.out.println(list); // [java, cpp, c#] list.remove(2); System.out.println(list); // [java, cpp] list.removeAll(list); System.out.println(list);
4.1.17 retainAll方法——保留指定collection包含的所有元素 294
4.1.18 size方法——返回列表中元素的個(gè)數(shù) 294
4.1.19 subList方法——獲取列表中指定范圍的子列表 295
List的subList方法用于獲取子List。需要注意的是,subList獲取的List與原List占有相同的存儲(chǔ)空間,對(duì)子List的操作會(huì)影響的原List。
List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 10; i++) { list.add(i); } System.out.println(list); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] List<Integer> subList = list.subList(3, 8); System.out.println(subList); // [3, 4, 5, 6, 7] // subList獲得的List和源List占有相同的數(shù)據(jù)空間 for (int i = 0; i < subList.size(); i++) { subList.set(i, subList.get(i) * 10); } System.out.println(subList); // [30, 40, 50, 60, 70] System.out.println(list); // [0, 1, 2, 30, 40, 50, 60, 70, 8, 9] // 可以用于刪除連續(xù)元素list.subList(3, 8).clear(); System.out.println(list);
4.1.20 toArray方法——返回所有元素的數(shù)組 296
List的toArray方法用于將集合轉(zhuǎn)換為數(shù)組。但實(shí)際上該方法是在Collection中定義的,所以所有的集合都具備這個(gè)功能。
我們可以傳入一個(gè)指定類型的數(shù)組,該數(shù)組的元素類型應(yīng)與集合的元素類型一致。返回值則是轉(zhuǎn)換后的數(shù)組,該數(shù)組會(huì)保存集合中所有的元素。
List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); //通常我們傳入的數(shù)組不需要給定長(zhǎng)度 String[] strArr = list.toArray(new String[] {}); System.out.println(Arrays.toString(strArr)); // [a, b, c]
數(shù)組轉(zhuǎn)化為list
//方法一 String[] strArr = { "a", "b", "c" }; List<String> list = Arrays.asList(strArr); System.out.println(list); // [a, b, c] // list.add("d"); // 會(huì)拋出UnsupportedOperationException // java.util.Arrays$ArrayList System.out.println(list.getClass().getName()); //方法二 List<String> list1 = new ArrayList<String>(); list1.addAll(Arrays.asList(strArr)); list1.add("d"); System.out.println(list1);
4.2 Map接口——映射集合類 297
4.2.1 clear方法——移除所有映射關(guān)系 297
4.2.2 containsKey方法——判斷是否包含指定的鍵名 298
4.2.3 containsValue方法——判斷是否包含指定的鍵值 298
4.2.4 equals方法——判斷是否與指定的對(duì)象相同 299
4.2.5 get方法——返回指定鍵所映射的值 300
4.2.6 isEmpty方法——判斷是否為空 300
4.2.7 keySet方法——獲取Map集合的所有key 301
4.2.8 put方法——向指定索引位置添加對(duì)象 301
4.2.9 putAll方法——追加另一個(gè)Map對(duì)象到當(dāng)前Map集合 302
4.2.10 remove方法——移除Map集合中指定鍵名的內(nèi)容 303
4.2.11 size方法——獲取Map集合類的大小 304
4.2.12 values方法——獲取Map集合中所有鍵值對(duì)象 304
4.3 Set接口——無(wú)重復(fù)元素集合類 305
4.3.1 add方法——向Set集合中添加對(duì)象 305
4.3.2 addAll方法——向Set集合添加另一個(gè)集合的所有內(nèi)容 306
4.3.3 clear方法——從Set集合中移除所有內(nèi)容 307
4.3.4 contains方法——判斷Set集合是否包含指定對(duì)象 307
4.3.5 containsAll方法——判斷Set集合是否包含另一個(gè)集合中全部對(duì)象 308
4.3.6 equals方法——比較指定對(duì)象與此Set是否相等 309
4.3.7 isEmpty方法——判斷Set集合是否為空 309
4.3.8 iterator方法——獲取Set集合的迭代器 310
4.3.9 remove方法——移除Set集合中指定對(duì)象 311
4.3.10 removeAll方法——移除另一個(gè)集合所包含的所有內(nèi)容 311
4.3.11 retainAll方法——保留另一個(gè)集合所包含的所有內(nèi)容 312
4.3.12 size方法——獲取Set集合類的大小 313
4.3.13 toArray方法——用Set集合的所有對(duì)象創(chuàng)建數(shù)組 313
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注