首頁  >  文章  >  Java  >  java集合框架詳解

java集合框架詳解

高洛峰
高洛峰原創
2017-01-23 10:29:171777瀏覽

1.java集合框架概述

java SE包含了由一組類別和介面組成的java集合框架(java Collection Framework,簡稱JCF),其主要功能是用來將儲存的資料以某種結構組織,並以特定的方式來存取這些數據,其目標是提供一個處理物件集合的通用框架,減少程式設計師處理不同物件集合時的編碼量。 

集合類別中的一些區別,除了它們是否支援重複元素操作外,還包括元素是否有順序,以及是否允許添加null元素。 java集合架構中依這三個區別,將物件的儲存方式分為三種類型,分別是: 

Set(集):物件容器中的物件沒有順序,且不能重複。 

List(列表):物件容器中的物件依照索引順序排序,而且可以有重複的物件。 

Map(映射):物件容器中的元素包含一對「鍵物件-值物件」映射,其中鍵物件不能重複,值物件可以重複。

為支援物件的排序與遍歷存取操作,java集合框架中又提供了幾個介面: 

介面SortedSet為Set類型容器提供拍戲功能。  

介面SortedMap為Map類型容器提供對鍵物件的排序。 

介面Comparable和comparator用來實現集合中物件的排序。 

2.Collection介面和Iterator介面

Collection介面中定義了Collection物件共有的一些基本方法

java集合框架詳解

Iterator介面是一種用於遍歷集合的介面。

java集合框架詳解

1.List介面 

List介面繼承自Collection接口,它有以下特點: 

List中的元素是有順序的。 

List通常允許重複元素。 

List的實作類別通常支援null元素。 

可以透過索引存取List物件容器中的元素。    

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(&#39;a&#39;);
      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 

java集合框架詳解

程式實例:

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類型容器中不能包含重複元素。當加入一個元素到容器中時,要比較元素的內容是否存在重複的,所以加入Set類型物件容器的物件必須重寫equals()方法。 

元素能有順序,也可能沒有順序。 

因為元素可能沒有順序,所以不能基於下標存取Set中費元素。 

實作Set介面最常用的是HashSet類別和TreeSet類別。

1).Hashset

Hashset類別是基於哈希演算法的Set介面實現,它主要有以下幾個特點: 

當遍歷Hashset時,其中的元素是沒有順序的。 

Hashset中不允許出現重複元素。這裡的重複元素是指有相同的雜湊碼,並且用equals()方法進行比較時,傳回true的兩個物件。 

允許包含null元素。

如果我們寫的類別重新定義了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);
      }
    }
  }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持PHP中文网!

更多java集合框架詳解相关文章请关注PHP中文网!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn