1.java集合框架概述
java SE包含了由一組類和接口組成的java集合框架(java Collection Framework,簡稱JCF),其主要功能是用來將存儲的數據以某種結構組織,并以特定的方式來訪問這些數據,其目標是提供一個處理對象集合的通用框架,減少程序員處理不同對象集合時的編碼量。
集合類中的一些區別,除了它們是否支持重復元素操作外,還包括元素是否有順序,以及是否允許添加null元素。java集合框架中根據這三個區別,將對象的存儲方式分為三種類型,分別是:
為支持對象的排序和遍歷訪問操作,java集合框架中又提供了幾個接口:
2.Collection接口和Iterator接口
Collection接口中定義了Collection對象共有的一些基本方法
| 方法 | 描述 |
| int size() | 返回當前集合中包含的元素個數 |
| isEmpyt() | 判斷集合中是否含有元素 |
| boolean contains(Objact o) | 判斷集合中是否含有某一指定元素 |
| add(Objact o) | 向集合中添加某一個元素 |
| remove(Objact o) | 從集合中刪除某一元素 |
| Iterator iterator() | 返回一個遍歷器,用來訪問集合中的各個元素 |
Iterator接口是一種用于遍歷集合的接口。
| 方法 | 描述 |
| hasNext() | 如果集合中還有更多元素,該方法返回true |
| next() | 返回集合中的下一個元素 |
| remove() | 刪除Iterator返回的最后一個元素 |
1.List接口
List接口繼承自Collection接口,它有如下特點:
List接口最常用的實現類是ArrayList類和LinkedList類。
1).ArrayList
程序實例:
package lei; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { List list = new ArrayList<>(); list.add(1); list.add("zhangsan"); list.add(false); list.add('a'); list.add(0, "lisi"); list.add(1); list.remove(1); list.remove(2); list.set(0, "wangwu"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }Object類定義的equals()方法只有在傳遞給該方法的對象與調用該方法的對象是同一對象的時候,才會返回true。可以通過重寫equals()方法來把具有相同狀態的兩個對象被看做是同一對象。
2).LinkedList
| 方法 | 描述 |
| void addFirst | 在鏈表開頭添加一個對象 |
| void addLast | 在鏈表末尾添加一個對象 |
| getFirst() | 返回鏈表中的第一個元素 |
| getLast() | 返回鏈表中的最后一個元素 |
| removeFirst() | 刪除鏈表中的第一個元素 |
| removeLast() | 刪除鏈表中的最后一個元素 |
程序實例:
package lei; import java.util.LinkedList; import java.util.List; public class Test2 { public static void main(String[] args) { LinkedList l=new LinkedList<>(); l.add("zhangsan"); l.add("lisi"); l.addFirst(1); l.addLast(4); System.out.println(l.getFirst()); System.out.println(l.getLast()); l.removeFirst(); l.removeLast(); for (int i = 0; i < l.size(); i++) { System.out.println(l.get(i)); } } }LinkedList與ArrayList的選擇
如果列表需要快速存取,但不經常進行元素的插入和刪除操作,那么選擇ArrayList會好一些;如果需要對;列表進行頻繁的插入和刪除操作,那么就應該選擇LinkedList。
2.set接口
set接口繼承自Collectiion接口,同時也繼承了Collection接口的全部方法。set接口有以下特點:
實現Set接口最常用的是HashSet類和TreeSet類。
1).Hashset
Hashset類是基于哈希算法的Set接口實現,它主要有如下幾個特點:
如果我們編寫的類重新定義了equals方法,那么這個類也必須重新定義hashCode()方法,并且保證當兩個對象用equals方法比較結果為true時,這兩個對象的hashCode()方法的返回值相等。
程序實例:
package lei; import java.util.HashSet; import java.util.Set; public class Test4 { public static void main(String[] args) { Set<String> set=new HashSet<String>(); set.add("zhangsan"); set.add("lisi"); for(String s:set){ System.out.println(s); } } }2).TreeSet
TreeSet類不僅實現類Set接口,還實現了SortedSet接口,從而保證集合中的對象按照一定的順序排序。當向TreeSet集合中添加一個對象時,會把它插入到有序的對象序列中,但是這種排序并不是按照對象添加的順序排序,而是按照一定的算法來排序。
TreeSet使用元素的自然順序對元素進行排序,或者根據創建Set時提供的Comparator進行排序。TreeSet支持自然排序和自定義排序兩種排序方式。
3.Map接口
Map(映射)接口是java集合框架中不同于Collection接口的另一個重要接口,它對應的是在一種從鍵(Key)到值(Value)的對應關系的集合。Map類型的對象容器里面保存著兩組對象,一組對象用于保存Map里的Key,另外一組用于保存Value。Key和Value可以升級任何引用類型的數據。Key不能重復,但是Value可以重復。
1).HashMap
HashMap是基于哈希算法的Map接口的實現。HashMap將它的鍵保存在哈希表中進行維護,鍵是唯一的。但是,HashMap并不保證鍵以特定順序排列,特別是不保證順序永久不變。
HashMap類實現了Map接口,從而具有Map接口的所有方法。
package day1228; import java.util.*; public class HashMapDemo { public static void main(String[] args) { // 創建一個新的HashMap Map<String, String> map = new HashMap<String, String>(); map.put("a1", "xiao"); map.put("b2", "xiaol"); map.put("a4", "xiaosd"); map.put("b1", "12a"); map.put("a3", "1"); // 使用iterator遍歷 鍵和值 System.out.println("之前的Map值是:"); Set<String> keys = map.keySet(); for (Iterator<String> i = keys.iterator(); i.hasNext();) { String key = i.next(); String value = map.get(key); System.out.println(key + "=" + value); } // 刪除鍵為"a4"的值 System.out.println("/n刪除鍵值為a4的元素"); map.remove("a4"); // //使用iterator遍歷 鍵和值 System.out.println("/n之后的Map值:"); keys = map.keySet(); for (Iterator<String> i = keys.iterator(); i.hasNext();) { String key = i.next(); String value = map.get(key); System.out.println(key + "=" + value); } } }2).TreeMap
TreeMap類是基于紅黑樹算法的Map接口實現。TreeMap中鍵的存放方式與TreeSet相似,它將鍵存放在樹中,鍵的順序按照自然順序或者自定義順序兩種方式排列。
程序實例:
package day1228; import java.util.*; public class TreeMapDemo { public static void main(String[] args) { //創建一個新的TreeMap Map<Integer, String> map = new TreeMap<Integer, String>(); map.put(1, "one"); map.put(2, "two"); map.put(3, "three"); map.put(4, "four"); map.put(5, "five"); //使用iterator顯示鍵和值 System.out.println("之前的map值為:"); Set<Integer> keys=map.keySet(); for(Object key:keys){ String value=map.get(key); System.out.println(key+"="+value); } //刪除鍵為3的值 System.out.println("/n刪除鍵值為3的元素"); map.remove(3); //使用iterator顯示鍵和值 System.out.println("/n之后的值Map為:"); for(Object key:keys){ String value=map.get(key); System.out.println(key+"="+value); } } }以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!
新聞熱點
疑難解答