java入門---資料結構之枚舉(Enumeration)&位集合(BitSet)__資料結構

來源:互聯網
上載者:User

    Java工具包提供了強大的資料結構。在Java中的資料結構主要包括以下幾種介面和類:

枚舉(Enumeration) 位集合(BitSet) 向量(Vector) 棧(Stack) 字典(Dictionary) 雜湊表(Hashtable) 屬性(Properties)

    以上這些類是傳統遺留的,在Java2中引入了一種新的架構-集合架構(Collection),我們後面的文章中會有記錄。然而這篇文章我們主要看枚舉(Enumeration)&位集合(BitSet)這兩種資料結構。首先是枚舉(Enumeration)

    枚舉(Enumeration)介面雖然它本身不屬於資料結構,但它在其他資料結構的範疇裡應用很廣。 枚舉(The Enumeration)介面定義了一種從資料結構中取回連續元素的方式。例如,枚舉定義了一個叫nextElement 的方法,該方法用來得到一個包含多元素的資料結構的下一個元素。

    Enumeration介面中定義了一些方法,通過這些方法可以枚舉(一次獲得一個)對象集合中的元素。這種傳統介面已被迭代器取代,雖然Enumeration 還未被遺棄,但在現代代碼中已經被很少使用了。儘管如此,它還是使用在諸如Vector和Properties這些傳統類所定義的方法中,除此之外,還用在一些API類,並且在應用程式中也廣泛被使用。下表總結了一些Enumeration聲明的方法:

序號 方法描述
1 boolean hasMoreElements( )
 測試此枚舉是否包含更多的元素。
2 Object nextElement( )
如果此枚舉對象至少還有一個可提供的元素,則返回此枚舉的下一個元素。

    以下執行個體示範了Enumeration的使用:

import java.util.Vector;
import java.util.Enumeration;
 
public class EnumerationTester {
 
   public static void main(String args[]) {
      Enumeration<String> days;
      Vector<String> dayNames = new Vector<String>();
      dayNames.add("Sunday");
      dayNames.add("Monday");
      dayNames.add("Tuesday");
      dayNames.add("Wednesday");
      dayNames.add("Thursday");
      dayNames.add("Friday");
      dayNames.add("Saturday");
      days = dayNames.elements();
      while (days.hasMoreElements()){
         System.out.println(days.nextElement());
      }
   }
}

    運行結果為:

SundayMondayTuesdayWednesdayThursdayFridaySaturday

    然後就來看下位集合(BitSet)。位集合類實現了一組可以單獨設定和清除的位或標誌。該類在處理一組布爾值的時候非常有用,你只需要給每個值賦值一"位",然後對位進行適當的設定或清除,就可以對布爾值進行操作了。

一個Bitset類建立一種特殊類型的數組來儲存位值。BitSet中數組大小會隨需要增加。這和位向量(vector of bits)比較類似。這是一個傳統的類,但它在Java 2中被完全重新設計。BitSet定義了兩個構造方法,第一個構造方法建立一個預設的對象:

BitSet()

    第二個方法允許使用者指定初始大小。所有位初始化為0:

BitSet(int size)

    BitSet中實現了Cloneable介面中定義的方法如下表所列:

序號 方法描述
1 void and(BitSet set)
對此目標位 set 和參數位 set 執行邏輯與操作。
2 void andNot(BitSet set)
清除此 BitSet 中所有的位,其相應的位在指定的 BitSet 中已設定。
3 int cardinality( )
返回此 BitSet 中設定為 true 的位元。
4 void clear( )
將此 BitSet 中的所有位設定為 false。
5 void clear(int index)
將索引指定處的位設定為 false。
6 void clear(int startIndex, int endIndex)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設定為 false。
7 Object clone( )
複製此 BitSet,產生一個與之相等的新 BitSet。
8 boolean equals(Object bitSet)
將此對象與指定的對象進行比較。
9 void flip(int index)
將指定索引處的位設定為其當前值的補碼。
10 void flip(int startIndex, int endIndex)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的每個位設定為其當前值的補碼。
11 boolean get(int index)
返回指定索引處的位值。
12 BitSet get(int startIndex, int endIndex)
返回一個新的 BitSet,它由此 BitSet 中從 fromIndex(包括)到 toIndex(不包括)範圍內的位組成。
13 int hashCode( )
返回此位 set 的雜湊碼值。
14 boolean intersects(BitSet bitSet)
如果指定的 BitSet 中有設定為 true 的位,並且在此 BitSet 中也將其設定為 true,則返回 ture。
15 boolean isEmpty( )
如果此 BitSet 中沒有包含任何設定為 true 的位,則返回 ture。
16 int length( )
返回此 BitSet 的"邏輯大小":BitSet 中最高設定位的索引加 1。
17 int nextClearBit(int startIndex)
返回第一個設定為 false 的位的索引,這發生在指定的起始索引或之後的索引上。
18 int nextSetBit(int startIndex)
返回第一個設定為 true 的位的索引,這發生在指定的起始索引或之後的索引上。
19 void or(BitSet bitSet)
對此位 set 和位 set 參數執行邏輯或操作。
20 void set(int index)
將指定索引處的位設定為 true。
21 void set(int index, boolean v)
 將指定索引處的位設定為指定的值。
22 void set(int startIndex, int endIndex)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設定為 true。
23 void set(int startIndex, int endIndex, boolean v)
將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設定為指定的值。
24 int size( )
返回此 BitSet 表示位值時實際使用空間的位元。
25 String toString( )
返回此位 set 的字串表示形式。
26 void xor(BitSet bitSet)
對此位 set 和位 set 參數執行邏輯異或操作。

    下面的程式說明這個資料結構支援的幾個方法:

import java.util.BitSet;
 
public class BitSetDemo {
 
  public static void main(String args[]) {
     BitSet bits1 = new BitSet(16);
     BitSet bits2 = new BitSet(16);
      
     // set some bits
     for(int i=0; i<16; i++) {
        if((i%2) == 0) bits1.set(i);
        if((i%5) != 0) bits2.set(i);
     }
     System.out.println("Initial pattern in bits1: ");
     System.out.println(bits1);
     System.out.println("\nInitial pattern in bits2: ");
     System.out.println(bits2);
 
     // AND bits
     bits2.and(bits1);
     System.out.println("\nbits2 AND bits1: ");
     System.out.println(bits2);
 
     // OR bits
     bits2.or(bits1);
     System.out.println("\nbits2 OR bits1: ");
     System.out.println(bits2);
 
     // XOR bits
     bits2.xor(bits1);
     System.out.println("\nbits2 XOR bits1: ");
     System.out.println(bits2);
  }
}

    運行結果為:

Initial pattern in bits1:{0, 2, 4, 6, 8, 10, 12, 14}Initial pattern in bits2:{1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}bits2 AND bits1:{2, 4, 6, 8, 12, 14}bits2 OR bits1:{0, 2, 4, 6, 8, 10, 12, 14}bits2 XOR bits1:{}
    好啦,這次就到這裡了,後續的資料結構會在之後的文章中記錄。如果感覺不錯的話,請多多點贊支援哦。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.