標籤:
在工作中,我們經常需要將多個對象集中存放,可以使用數組,但是數組的長度一旦固定之後是不可變的,為了儲存數量確定的資料,我們可以使用JAVA中的集合。
在我看來,JAVA中的集合可以看作是一個特殊的資料庫,可以針對這個資料庫進行資料的增刪查改,可以查看資料庫的大小,查看資料庫是否為空白等等。
JAVA中的集合是由Collection和Map兩個介面派生出來的,正因為是兩個介面,所以只能通過其子類來將其執行個體化,為常用集合:
Collection是List、Queue和Set介面的父介面,Map是HashMap的父介面。
正因為是介面,所以實際使用是需要通過其子類將其執行個體化。
Collection可以看作是傳統意義上的資料庫,提供一系列針對資料庫的增刪查改判斷操作
List
public class ListDemo01 { public static void main(String[] args) { List list = new ArrayList(); // 使用add()向List中添加元素,可見List是可重複的 list.add("A"); list.add("B"); list.add("A"); // 通過迴圈遍曆集合內容 for (int i = 0; i < list.size(); i++) { // 使用size()方法獲得list長度 System.out.println("第" + (i + 1) + "個元素是: " + list.get(i)); // 使用get(x)來獲得list中第x位置的元素 } // 使用remove(x)來移除list中第x位的元素 list.remove(1); // 通過迴圈遍曆集合內容 for (int i = 0; i < list.size(); i++) { // 使用size()方法獲得list長度 System.out.println("移除之後,第" + (i + 1) + "個元素是: " + list.get(i)); // 使用get(x)來獲得list中第x位置的元素 } // 使用isEmpty()來查看集合是否為空白,如果返回true則為空白,false則不為空白 if (list.isEmpty()) { System.out.println("這個集合是空的"); } else { System.out.println("這個集合不是空的"); } // 使用addAll將另一個集合添加到集合中 List list2 = new ArrayList(); list2.add(123); list2.add("D"); list2.add(123); list.addAll(list2); for (int i = 0; i < list.size(); i++) { // 使用size()方法獲得list長度 System.out .println("移除之後,又添加後,第" + (i + 1) + "個元素是: " + list.get(i)); // 使用get(x)來獲得list中第x位置的元素 } // 使用contains(x)方法來判斷集合中是否存在x元素 if (list.contains("Z")) { System.out.println("集合中存在這個元素"); } else { System.out.println("集合中不存在這個元素"); } // 使用containsAll(x)方法來判斷集合中是否包含某個集合 List list3 = new ArrayList(); list3.add("A"); list3.add("B"); if (list.containsAll(list3)) { System.out.println("list中包含list3"); } else { System.out.println("list中不包含list3"); } // 使用indexOf(x)來擷取x元素在集合中的位置,如果存在該元素,則返回該元素首次出現的位置,如果不存在,則返回-1 System.out.println("123在list2中出現的位置為: " + list2.indexOf(123)); System.out.println("123在list2中出現的位置為: " + list2.indexOf(456)); // 使用indexOf(x)來擷取最後一個x元素在集合中的位置,如果存在該元素,則返回該元素最後出現的位置,如果不存在,則返回-1 System.out.println("123在list2中最後一次出現的位置為: " + list2.lastIndexOf(123)); System.out.println("123在list2中最後一次出現的位置為: " + list2.lastIndexOf(456)); //使用set(x,y)來講list中第x個元素替換為y list2.set(2, 456); for (int i = 0; i < list2.size(); i++) { System.out.println("替換之後,list的第" + (i+1) + "個元素為: " + list2.get(i)); }
System.out.println(list2);
}}
所有的Collection的實作類別都重寫了toString()方法,並且ArrayList是以“動態數組”的形式來儲存資料的,當使用System.out.println()來直接輸出List的話,會輸出[xx,yy,zz]的形式
set
HashSet是Set的實作類別,它就好像一個箱子,我們可以往這個箱子裡放若干個對象,但是我們卻無法擷取到箱子裡面對象的順序,也不能放相同的對象
HashSet和ArrayList提供的方法基本相同,只是HashSet中不允許添加重複的對象,如果使用add()添加重複對象,則會返回false,並且新添加的元素不會被添加。
當向一個HashSet添加一個元素的時候,HashSet會調用該對的hashCode()方法來擷取到這個對象的hashCode值,然後集合中存在相同hashCode的對象,則添加不成功。
public class SetDemo02 { public static void main(String[] args) { Set set = new HashSet(); //通過add(x)方法來講x元素添加到set中 set.add("A"); set.add(1234); set.add(1234); //使用set的iterator()方法擷取到set的迭代期,再通過迭代期的next()方法擷取到set中的值 //通過輸出結果可以看到上面添加的1234其實只添加成功一個 Iterator iterator = set.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } Set set2 = new HashSet(); set2.add("B"); set2.add("C"); set2.add("D"); //通過addAll()方法來將一個set集合添加到另一個中 set.addAll(set2); iterator = set.iterator(); System.out.println("添加進一個集合之後,集合中的元素有"); while (iterator.hasNext()) { System.out.println(iterator.next()); } //通過contains()方法來判斷集合中是否包含某個元素 if (set.contains("A")) { System.out.println("這個集合中包含A元素"); }else { System.out.println("這個集合中不包含A元素"); } //使用remove(x)來移除集合中的x元素,如果存在並移除,則返回true,否則返回false if (set.remove("A")) { System.out.println("集合中存在A元素,並且已經移除"); }else { System.out.println("集合中不存在A元素"); } }}
Map
JAVA提供了一種以<鍵,值>形式儲存的集合---Map,你可以通過“鍵”尋找“值”。一個 Map 中不能包含相同的 key ,每個 key 只能映射一個 value 。
Map是一個介面,他提供了HashMap, Hashtable, LinkedHashMap等子類,實際中常用HashMap。
Map 介面提供三種collection 視圖,允許以鍵集、值集或鍵-值對應關係集的形式查看某個映射的內容。
public class MapDemo01 { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); //使用put(x,y)來添加索引值對 map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); map.put("key4", "value4"); map.put("key5", "value5"); map.put("key6", "value6"); //通過get(x)來擷取key為x的值 String str = map.get("key1"); System.out.println(str); //使用containsKey(x)來判斷是否存在key為x的索引值對 if (map.containsKey("key3")) { System.out.println("key值為key3的集合存在"); } else { System.out.println("key值為key3的集合不存在"); } //使用containsValue(x)來判斷是否存在Value為x的索引值對 if (map.containsValue("key3")) { System.out.println("value值為key3的集合存在"); } else { System.out.println("value值為key3的集合不存在"); } //使用keySet()來擷取map中所有鍵,返回一個Set集合 Set<String> set = map.keySet(); Iterator<String> iterator = set.iterator(); while (iterator.hasNext()) { String s = iterator.next(); System.out.println("key:" + s + "----value:" + map.get(s)); } //使用values()來擷取map中所有值,返回一個Collection Collection<String> c = map.values(); Iterator iterator2 = c.iterator(); while (iterator2.hasNext()) { System.out.println(iterator2.next()); } //使用remove(x)來移除key為x的索引值對 map.remove("key3"); System.out.println("移除之後,map中剩餘的索引值對"); Collection<String> c2 = map.values(); Iterator iterator3 = c2.iterator(); while (iterator3.hasNext()) { System.out.println(iterator3.next()); } }}
JAVA筆記整理(九),JAVA中的集合