【java基礎知識】【java集合類和接口】

在JDK API中專門設計了一組類,這組類的功能就是實現各類各樣方式的數據存儲,這樣一組專門用來存儲其它對象的類,通常被稱爲對象容器類,簡稱容器類,這組類和接口的設計結構也被統稱爲集合框架(Collection Framework)。
這組類和接口都包含在java.util包中。

爲了使整個集合框架中的類便於使用,在設計集合框架時大量的使用接口,實際實現的功能類實現對應的接口,這樣能夠保證各個集合類的使用方式保持統一。

集合框架中的類就分紅了三大類:
一、List系列
   該系列中的類按照索引值來操做數據,容許存放重複的元素。
二、Set系列
     該系列中的類按照索引值來操做數據,不容許存放重複的元素。
三、Map系列
   該系列中的類按照名稱來操做數據,鍵(key)不容許重複,值(value)能夠重複,一個鍵對應一個惟一的值。

一、List(有序、索引、可重複)

 
List系列的類均實現List接口,大部分的類都以List做爲類名的後綴,也有部分該體系中的類命名比較特殊。
    該系列中的類,比較常見的有ArrayList和LinkedList兩個。其中ArrayList是以數組爲基礎實現的List,而LinkedList則是以鏈表爲基礎實現的List,ArrayList擁有數組的優勢,而LinkedList擁有鏈表的優勢。
    因爲該體系中的類均實現List接口,因此在這些類的內部,相同的功能方法聲明是保持一致的,下面進行一一介紹:

  a、add方法
  boolean add(Object o)
  該方法的做用是追加對象o到已有容器的末尾。

  另一個add方法:
  void add(int index, Object element)
  該方法的做用是將對象element插入到容器中索引值爲index的位置,原來位於該位置的對象以及後續的內容將依次向後移動。java

  b、addAll方法
  boolean addAll(Collection c)
  該方法的做用是將容器對象c中的每一個元素依次添加到當前容器的末尾。數組

  另一個addAll方法:
  boolean addAll(int index, Collection c)
  該方法的做用是將容器對象c中的第一個元素插入到當前容器中索引值爲index的位置,第二個元素插入到當前容器中索引值爲index+1的位置,依次類推而當前容器中原來位於index以及index索引值之後的元素則依次向後移動。數據結構

  c、get方法
  Object get(int index)
  該方法的做用是返回當前容器對象中索引值爲index的元素的內容。框架

  d、indexOf方法
  int indexOf(Object o)
  該方法的做用是查找當前容器中是否存在對象o,若是存在則返回該對象第一次出現位置的索引值,若是不存在則返回-1。
  另一個方法lastIndexOf則是從末尾向前查找,返回從末尾向前第一次出現位置的索引值,若是不存在則返回-1。spa

  e、remove方法
  Object remove(int index)
  該方法的做用是刪除索引值爲index的對象的內容,若是刪除成功則返回被刪除對象的內容。設計

  另一個remove方法:
  boolean remove(Object o)
  該方法的做用是刪除對象內容爲o的元素,若是相同的對象有多個,則只刪除索引值小的對象。若是刪除成功則返回true,不然
返回false。
不管使用哪個remove方法,類內部都自動移動將被刪除位置後續的全部元素向前移動,保證索引值的連續性。code

  f、set方法
  Object set(int index, Object element)
  該方法的做用是修改索引值爲index的內容,將原來的內容修改爲對象element的內容。對象

  g、size方法
  int size()
  該方法的做用是返回當前容器中已經存儲的有效元素的個數。blog

  h、toArray方法
  Object[] toArray()
  該方法的做用是將當前容器中的元素按照順序轉換成一個Object數組。索引

/**
 * 以ArrayList類爲基礎演示List系列類的基本使用
 */
public class ArrayListUse {
         public static void main(String[] args) {
                   //容器對象的初始化
                   List list = new ArrayList();                 
                   //添加數據
                   list.add("1");
                   list.add("2");
                   list.add("3");
                   list.add("1");
                   list.add("1");            
                   //插入數據
                   list.add(1,"12");               
                   //修改數據
                   list.set(2, "a");                  
                   //刪除數據
                   list.remove("1");              
                   //遍歷
                   int size = list.size(); //得到有效個數
                   //循環有效索引值
                   for(int i = 0;i < size;i++){
                            System.out.println((String)list.get(i));
                   }
         }
}
 該程序的運行結果爲:

                   12

           a
           3
           1
           1
二、Set(惟1、無序)
    Set系列中的類都實現了Set接口,該系列中的類均以Set做爲類名的後綴。該系列中的容器類,不容許存儲重複的元素。也就是當容器中已經存儲一個相同的元素時,沒法實現添加一個徹底相同的元素,也沒法將已有的元素修改爲和其它元素相同。
    Set系列中類的這些特色,使得在某些特殊場合的使用比較適合。
該系列中常見的類有:
    一、CopyOnWriteArraySet
    以數組爲基礎實現的Set類。
    二、HashSet
    以哈希表爲基礎實現的Set類。
    三、LinkedHashSet
    以鏈表爲基礎實現的Set類。
    四、TreeSet
    以樹爲基礎實現的Set類。
        
以不一樣的數據結構類型實現的Set類,擁有不一樣數據結構帶來的特性,在實際使用時,根據邏輯的須要選擇合適的Set類進行使用。 Set系列中的類的方法和List系列中的類的方法要比List系列中少不少,例如不支持插入和修改,並且對於Set系列中元素的遍歷也須要轉換爲專門的Iterator(迭代器)對象才能夠進行遍歷,遍歷時順序和Set中存儲的順序會有所不一樣。 下面是以HashSet類爲基礎實現的示例代碼,代碼以下:
 
import java.util.*;

/**
 * 以HashSet爲基礎演示Set系列類的基本使用
 */
public class HashSetUse {
         public static void main(String[] args) {
                   //容器對象的初始化
                   Set set = new HashSet();         
                   //添加元素
                   set.add("1");
                   set.add("2");
                   set.add("3");
                   set.add("1");
                   set.add("1");                              
                   //刪除數據
                   //set.remove("1");          
                   //遍歷
                   Iterator iterator = set.iterator();
                   while(iterator.hasNext()){
                            System.out.println((String)iterator.next());
                   }
         }
}
該程序的運行結果爲:
3
2
1

list用add()加進去後是有前後順序的,順序是必定的,set恰好沒有順序,簡單來講是亂的
ArrayList 把1,2,3,4前後加進去,遍歷出來就是1234,Set可不必定喲,可能就是4213或1243等等

三、Map(鍵值對、鍵惟一)

 
Map系列中的類都實現了Map接口,該系列中的部分類以Map做爲類名的後綴。該系列容器類存儲元素的方式和以上兩種徹底不一樣。
Map提供了一種使用「鍵:值」這樣的名稱和數值對存儲數據的方法,在該存儲方式中,名稱不能夠重複,而不一樣的名稱中能夠存儲相同的數值。具體這種存儲的格式將在示例代碼中進行實現。
在這種存儲結構中,任何不爲null的對象均可以做爲一個鍵(key)來做爲存儲的值(value)的標識,使用這種形式更利於存儲比較零散的數據,也方便數據的查找和得到。Map類中存儲的數據沒有索引值,系統會以必定的形式索引存儲的名稱,從而提升讀取數據時的速度。
         
該系列中常見的類有: 一、HashMap 以Hash(哈希表)爲基礎實現的Map類。 二、LinkedHashMap 以鏈表和Hash(哈希表)爲基礎實現的Map類。 三、TreeMap 以樹爲基礎實現的Map類。 和上面的結構相似,以不一樣的數據結構實現的Map類,擁有不一樣數據結構的特色,在實際的項目中使用時,根據須要選擇合適的便可。
該系列的類中常見的方法以下: a、get方法 Object get(Object key) 該方法的做用是得到當前容器中名稱爲key的結構對應的值。
b、keySet方法 Set keySet() 該方法的做用是返回當前容器中全部的名稱,將全部的名稱以Set的形式返回。使用這個方法能夠實現對於Map中全部元素的遍歷。
c、put方法 Object put(Object key, Object value) 該方法的做用是將值value以名稱key的形式存儲到容器中。

d、putAll方法 void putAll(Map t) 該方法的做用是將Map對象t中的全部數據按照原來的格式存儲到當前容器類中,至關於合併兩個Map容器對象。
e、remove方法 Object remove(Object key) 該方法的做用是刪除容器中名稱爲key的值。
f、size方法 int size() 該方法的做用是返回當前日期中存儲的名稱:值數據的組數。
g、values方法 Collection values() 該方法的做用是返回當前容器全部的值組成的集合,以Collection對象的形式返回。

  下面是一個簡單的示例,在該示例中演示Map系列類的基本使用,代碼以下:
 
import java.util.*;

/**
 * 以HashMap爲基礎演示Map系列中類的使用
 */
public class HashMapUse {
         public static void main(String[] args) {
                   //容器對象的初始化
                   Map map = new HashMap();           
                   //存儲數據
                   map.put("蘋果", "2.5");
                   map.put("桔子", "2.5");
                   map.put("香蕉", "3");
                   map.put("菠蘿", "2");             
                   //刪除元素
                   map.remove("桔子");              
                   //修改元素的值
                   map.put("菠蘿", "5");             
                   //得到元素個數
                   int size = map.size();
                   System.out.println("個數是:" + size);          
                   //遍歷Map
                   Set set = map.keySet();
                   Iterator iterator = set.iterator();
                   while(iterator.hasNext()){
                            //得到名稱
                            String name = (String)iterator.next();
                            //得到數值
                            String value = (String)map.get(name);
                            //顯示到控制檯
                            System.out.println(name + ":" + value);
                   }
         }
}
 

 

該程序的運行結果爲:

個數是:3香蕉:3菠蘿:5蘋果:2.5

相關文章
相關標籤/搜索