導航:首頁 > 編程語言 > java數組枚舉

java數組枚舉

發布時間:2022-12-30 11:33:12

java怎麼遍歷一個枚舉數組的所有集合

每個問題只有對、錯2種情況的話,每個問題相當於1個bit。
10個問題就是10個bit
循環從0到0b11111 11111,逐個列印數字
即從0到1023循環
for(int i=0;i<1024;i++){
System.out.println(i); //每個i保留10個bit,這10個bit的每個bit就代表每個問題的對錯
}
比如
1000這個值,二進制為1111101000
可以理解成「對對對對對錯對錯錯錯」
0理解成00000 00000,代表全錯
1023理解成11111 11111代表全對
從0到1023就是所有的可能
這是最高效節省的表示法。

Ⅱ JAVA數據結構有哪幾種

JAVA數據結構有以下幾種:

1、List:

List是有序的Collection,使用此介面能夠精確的控制每個元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似於數組下 >標)來訪問List中的元素,這類似於Java的數組。

2、Vector:

基於數組(Array)的List,其實就是封裝了數組所不具備的一些功能方便我們使用,所以它難易避免數組的限制,同時性能也不可能超越數組。

另外很重要的一點就是Vector是線程同步的(sychronized)的,這也是Vector和ArrayList 的一個的重要區別。

3、ArrayList:

同Vector一樣是一個基於數組上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是當運行到多線程環境中時,可需要自己在管理線程的同步問題。

4、LinkedList:

LinkedList不同於前面兩種List,它不是基於數組的,所以不受數組性能的限制。 它每一個節點(Node)都包含兩方面的內容:節點本身的數據(data),下一個節點的信息(nextNode)。

所以當對LinkedList做添加,刪除動作的時候就不用像基於數組的ArrayList一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了,這是LinkedList的優勢。

5、HashSet:

雖然Set同List都實現了Collection介面,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。

但是Set則是在 HashMap的基礎上來實現的,這就是Set和List的根本區別。HashSet的存儲方式是把HashMap中的Key作為Set的對應存儲項。

6、HashMap:

基於哈希表的 Map 介面的實現。此實現提供所有可選的映射操作,並允許使用 null 值和 null 鍵。(除了不同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。)此類不保證映射的順序,特別是它不保證該順序恆久不變。

7、HashTable:

Hashtable 是一個散列表,它存儲的內容是鍵值對(key-value)映射。Hashtable 繼承於Dictionary,實現了Map、Cloneable、java.io.Serializable介面。

Hashtable 的函數都是同步的,這意味著它是線程安全的。它的key、value都不可以為nul

Ⅲ java枚舉型的值都是字元串嗎

可以是整型,順便給你我總結的枚舉。
1.枚舉對象裡面的值都必須是唯一的,enum 中不能刪除添加元素。

2.元素是公有靜態的public static,構造方法只能為private。

2.可以通過 Enum 類名直接引用該常量,如Unit.u1

3.允許程序員為eunm 實例編寫方法,如果打算自定義自己的方法,那麼必須在enum實例序列的最後添加一個分號。而且 Java 要求必須先定義 enum 實例,否則編譯器會報錯。

4.可以創建一個enum 類,把它看做一個普通的類(可以有抽象方法)。可以添加其他方法,覆蓋它本身的方法。

5.values() 方法是編譯器插入到enum 定義中的static 方法,所以,當你將enum 實例向上轉型為父類Enum 是,values() 就不可訪問了。

6.所有enum都繼承java.lang.Enum類。

7.所有枚舉類都提供一個靜態的values()方法(返回該枚舉類所有對象組成的數組),便於遍歷所有枚舉對象。

for (Unit u: Unit.values()) {
System.out.println(u); }

Ⅳ 在java中怎麼取出數組中的數據

1.方法:
public final synchronized void setsize(int newsize);
此方法用來定義向量的大小,若向量對象現有成員個數已經超過了newsize的值,則超過部分的多餘元素會丟失。
2.程序中定義Enumeration類的一個對象Enumeration是java.util中的一個介面類,
在Enumeration中封裝了有關枚舉數據集合的方法。
在Enumeration提供了方法hasMoreElement()來判斷集合中是否還有其他元素和方法nextElement()來判斷集合中是否還有其他元素和方法nextElement()來獲取下一個元素。利用這兩個方法,可以依次獲得集合中的元素。
3.Vector中提供方法:
public final synchronized Enumeration elements();
此方法將向量對象對應到一個枚舉類型。java.util包中的其他類中也都有這類方法,以便於用戶獲取對應的枚舉類型。

Ⅳ enum在java中是什麼意思

Enum 類型的介紹

枚舉類型(Enumerated Type) 很早就出現在編程語言中,它被用來將一組類似的值包含到一種類型當中。而這種枚舉類型的名稱則會被定義成獨一無二的類型描述符,在這一點上和常量的定義相似。不過相比較常量類型,枚舉類型可以為申明的變數提供更大的取值范圍。

舉個例子來說明一下,如果希望為彩虹描繪出七種顏色,你可以在 Java 程序中通過常量定義方式來實現。

清單 1. 常量定義

PublicstaticclassRainbowColor{

//紅橙黃綠青藍紫七種顏色的常量定義
publicstaticfinalintRED=0;
publicstaticfinalintORANGE=1;
publicstaticfinalintYELLOW=2;
publicstaticfinalintGREEN=3;
publicstaticfinalintCYAN=4;
publicstaticfinalintBLUE=5;
publicstaticfinalintPURPLE=6;
}

使用的時候,你可以在程序中直接引用這些常量。但是,這種方式還是存在著一些問題。

類型不安全

由於顏色常量的對應值是整數形,所以程序執行過程中很有可能給顏色變數傳入一個任意的整數值,導致出現錯誤。

沒有命名空間

由於顏色常量只是類的屬性,當你使用的時候不得不通過類來訪問。

一致性差

因為整形枚舉屬於編譯期常量,所以編譯過程完成後,所有客戶端和伺服器端引用的地方,會直接將整數值寫入。這樣,當你修改舊的枚舉整數值後或者增加新的枚舉值後,所有引用地方代碼都需要重新編譯,否則運行時刻就會出現錯誤。

類型無指意性

由於顏色枚舉值僅僅是一些無任何含義的整數值,如果在運行期調試時候,你就會發現日誌中有很多魔術數字,但除了程序員本身,其他人很難明白其奧秘。


如何定義 Enum 類型

為了改進 Java 語言在這方面的不足彌補缺陷,5.0 版本 SDK 發布時候,在語言層面上增加了枚舉類型。枚舉類型的定義也非常的簡單,用 enum 關鍵字加上名稱和大括弧包含起來的枚舉值體即可,例如上面提到的彩虹顏色就可以用新的 enum 方式來重新定義:

enumRainbowColor{RED,ORANGE,YELLOW,GREEN,CYAN,BLUE,PURPLE}

從上面的定義形式來看,似乎 Java 中的枚舉類型很簡單,但實際上 Java 語言規范賦予枚舉類型的功能非常的強大,它不僅是簡單地將整形數值轉換成對象,而是將枚舉類型定義轉變成一個完整功能的類定義。這種類型定義的擴展允許開發者給枚舉類型增加任何方法和屬性,也可以實現任意的介面。另外,Java 平台也為 Enum 類型提供了高質量的實現,比如默認實現 Comparable 和 Serializable 介面,讓開發者一般情況下不用關心這些細節。

回到本文的主題上來,引入枚舉類型到底能夠給我們開發帶來什麼樣好處呢?一個最直接的益處就是擴大 switch 語句使用范圍。5.0 之前,Java 中 switch 的值只能夠是簡單類型,比如 int、byte、short、char, 有了枚舉類型之後,就可以使用對象了。這樣一來,程序的控制選擇就變得更加的方便,看下面的例子:

清單 2. 定義 Enum 類型

//定義一周七天的枚舉類型
publicenumWeekDayEnum{Mon,Tue,Wed,Thu,Fri,Sat,Sun}
//讀取當天的信息
WeekDayEnumtoday=readToday();

//根據日期來選擇進行活動
switch(today){
Mon:dosomething;break;
Tue:dosomething;break;
Wed:dosomething;break;
Thu:dosomething;break;
Fri:dosomething;break;
Sat:playsportsgame;break;
Sun:havearest;break;
}


對於這些枚舉的日期,JVM 都會在運行期構造成出一個簡單的對象實例一一對應。這些對象都有唯一的 identity,類似整形數值一樣,switch 語句就根據此來進行執行跳轉。


如何定製 Enum 類型

除了以上這種最常見的枚舉定義形式外,如果需要給枚舉類型增加一些復雜功能,也可以通過類似 class 的定義來給枚舉進行定製。比如要給 enum 類型增加屬性,可以像下面這樣定義:

清單 3. 定製枚舉類型

//定義RSS(ReallySimpleSyndication)種子的枚舉類型
publicenumNewsRSSFeedEnum{
//雅虎頭條新聞RSS種子
YAHOO_TOP_STORIES("http://rss.news.yahoo.com/rss/topstories"),

//CBS頭條新聞RSS種子
CBS_TOP_STORIES("http://feeds.cbsnews.com/CBSNewsMain?format=xml"),

//洛杉磯時報頭條新聞RSS種子
LATIMES_TOP_STORIES("http://feeds.latimes.com/latimes/news?format=xml");

//枚舉對象的RSS地址的屬性
privateStringrss_url;

//枚舉對象構造函數
privateNewsRSSFeedEnum(Stringrss){
this.rss_url=rss;
}

//枚舉對象獲取RSS地址的方法
publicStringgetRssURL(){
returnthis.rss_url;
}
}

上面頭條新聞的枚舉類型增加了一個 RSS 地址的屬性 , 記錄頭條新聞的訪問地址。同時,需要外部傳入 RSS 訪問地址的值,因而需要定義一個構造函數來初始化此屬性。另外,還需要向外提供方法來讀取 RSS 地址。


如何避免錯誤使用 Enum

不過在使用 Enum 時候有幾個地方需要注意:

enum 類型不支持 public 和 protected 修飾符的構造方法,因此構造函數一定要是 private 或 friendly 的。也正因為如此,所以枚舉對象是無法在程序中通過直接調用其構造方法來初始化的。

定義 enum 類型時候,如果是簡單類型,那麼最後一個枚舉值後不用跟任何一個符號;但如果有定製方法,那麼最後一個枚舉值與後面代碼要用分號';'隔開,不能用逗號或空格。

由於 enum 類型的值實際上是通過運行期構造出對象來表示的,所以在 cluster 環境下,每個虛擬機都會構造出一個同義的枚舉對象。因而在做比較操作時候就需要注意,如果直接通過使用等號 ( 『 == 』 ) 操作符,這些看似一樣的枚舉值一定不相等,因為這不是同一個對象實例。

看下面的這個例子:

清單 4. 避免錯誤使用 Enum 示例

//定義一個一周七天的枚舉類型
packageexample.enumeration.codes;
publicenumWeekDayEnum{
Mon(1),Tue(2),Wed(3),Thu(4),Fri(5),Sat(6),Sun(7);
privateintindex;
WeekDayEnum(intidx){
this.index=idx;
}
publicintgetIndex(){
returnindex;
}
}
//客戶端程序,將一個枚舉值通過網路傳遞給伺服器端
packageexample.enumeration.codes;
importjava.io.IOException;
importjava.io.ObjectOutputStream;
importjava.io.OutputStream;
importjava.net.InetSocketAddress;
importjava.net.Socket;
importjava.net.UnknownHostException;
publicclassEnumerationClient{
publicstaticvoidmain(String...args)throwsUnknownHostException,IOException{
Socketsocket=newSocket();
//建立到伺服器端的連接
socket.connect(newInetSocketAddress("127.0.0.1",8999));
//從連接中得到輸出流
OutputStreamos=socket.getOutputStream();
ObjectOutputStreamoos=newObjectOutputStream(os);
//將星期五這個枚舉值傳遞給伺服器端
oos.writeObject(WeekDayEnum.Fri);
oos.close();
os.close();
socket.close();
}
}
//伺服器端程序,將從客戶端收到的枚舉值應用到邏輯處理中
packageexample.enumeration.codes;
importjava.io.*;
importjava.net.ServerSocket;
importjava.net.Socket;
publicclassEnumerationServer{
publicstaticvoidmain(String...args)throwsIOException,ClassNotFoundException{
ServerSocketserver=newServerSocket(8999);
//建立伺服器端的網路連接偵聽
Socketsocket=server.accept();
//從連接中獲取輸入流
InputStreamis=socket.getInputStream();
ObjectInputStreamois=newObjectInputStream(is);
//讀出客戶端傳遞來的枚舉值
WeekDayEnumday=(WeekDayEnum)ois.readObject();
//用值比較方式來對比枚舉對象
if(day==WeekDayEnum.Fri){
System.out.println("'s");
}elseif(day.equals(WeekDayEnum.Fri)){
System.out.println("'s");
}else{
System.out.println("'s");
}

//用switch方式來比較枚舉對象
switch(day){
caseMon:
System.out.println("DoMondaywork");
break;
caseTue:
System.out.println("DoTuesdaywork");
break;
caseWed:
System.out.println("DoWednesdaywork");
break;
caseThu:
System.out.println("DoThursdaywork");
break;
caseFri:
System.out.println("DoFridaywork");
break;
caseSat:
System.out.println("DoSaturdaywork");
break;
caseSun:
System.out.println("DoSundaywork");
break;
default:
System.out.println("Idon'tknowwhichisday");
break;
}

ois.close();
is.close();
socket.close();
}
}

列印結果如下:

client Friday enum value is same as server's
Do Friday work

通過程序執行結果,我們能夠發現在分布式條件下客戶端和服務端的虛擬機上都生成了一個枚舉對象,即使看起來一樣的 Fri 枚舉值,如果使用等號『 == 』進行比較的話會出現不等的情況。而 switch 語句則是通過 equal 方法來比較枚舉對象的值,因此當你的枚舉對象較復雜時候,你就需要小心 override 與比較相關的方法,防止出現值比較方面的錯誤。


Enum 相關工具類

JDK5.0 中在增加 Enum 類的同時,也增加了兩個工具類 EnumSet 和 EnumMap,這兩個類都放在 java.util 包中。EnumSet 是一個針對枚舉類型的高性能的 Set 介面實現。EnumSet 中裝入的所有枚舉對象都必須是同一種類型,在其內部,是通過 bit-vector 來實現,也就是通過一個 long 型數。EnumSet 支持在枚舉類型的所有值的某個范圍中進行迭代。回到上面日期枚舉的例子上:

enumWeekDayEnum{Mon,Tue,Wed,Thu,Fri,Sat,Sun}

你能夠在每周七天日期中進行迭代,EnumSet 類提供一個靜態方法 range 讓迭代很容易完成:

for(WeekDayEnumday:EnumSet.range(WeekDayEnum.Mon,WeekDayEnum.Fri)){
System.out.println(day);
}

列印結果如下:

Mon
Tue
Wed
Thu
Fri

EnumSet 還提供了很多個類型安全的獲取子集的 of 方法,使你很容易取得子集:

EnumSet<WeekDayEnum>subset=EnumSet.of(WeekDayEnum.Mon,WeekDayEnum.Wed);
for(WeekDayEnumday:subset){
System.out.println(day);
}

列印結果如下:

Mon
Wed

與 EnumSet 類似,EnumMap 也是一個高性能的 Map 介面實現,用來管理使用枚舉類型作為 keys 的映射表,內部是通過數組方式來實現。EnumMap 將豐富的和安全的 Map 介面與數組快速訪問結合到一起,如果你希望要將一個枚舉類型映射到一個值,你應該使用 EnumMap。看下面的例子:

清單 5. EnumMap 示例

//定義一個EnumMap對象,映射表主鍵是日期枚舉類型,值是顏色枚舉類型
privatestaticMap<WeekDayEnum,RainbowColor>schema=
newEnumMap<WeekDayEnum,RainbowColor>(WeekDayEnum.class);

static{
//將一周的每一天與彩虹的某一種色彩映射起來
for(inti=0;i<WeekDayEnum.values().length;i++){
schema.put(WeekDayEnum.values()[i],RainbowColor.values()[i]);
}
}
System.out.println("Whatistheluckycolortoday?");
System.out.println("It's"+schema.get(WeekDayEnum.Sat));

當你詢問周六的幸運色彩時候,會得到藍色:

清單 6. 運行結果

What is the lucky color today?
It's BLUE


結束語

Enum 類型提出給 JAVA 編程帶了了極大的便利,讓程序的控制更加的容易,也不容易出現錯誤。所以在遇到需要控製程序流程時候,可以多想想是否可以利用 enum 來實現。

Ⅵ 用java實現 枚舉從數組arr中取n個數,組成新數組的所有情況

使用嵌套for循環即可完成,原理可以參考冒泡排序。

Ⅶ java5中的枚舉與字元串數組的區別

隨著計算機的不斷普及,程序不僅只用於數值計算,還更廣泛地用於處理非數值的數據。例如:性別、月份、星期幾、顏色、單位名、學歷、職業等,都不是數值數據。在其它程序設計語言中,一般用一個數值來代表某一狀態,這種處理方法不直觀,易讀性差。如果能在程序中用自然語言中有相應含義的單詞來代表某一狀態,則程序就很容易閱讀和理解。也就是說,事先考慮到某一變數可能取的值,盡量用自然語言中含義清楚的單詞來表示它的每一個值,這種方法稱為枚舉方法,用這種方法定義的類型稱枚舉類型

Ⅷ java里枚舉類型用於返回一個數組的方法values()在哪個里啊

用法一:常量
在JDK1.5 之前,我們定義常量都是: publicstaticfianl.... 。現在好了,有了枚舉,可以把相關的常量分組到一個枚舉類型里,而且枚舉提供了比常量更多的方法。

Java代碼
public enum Color {
RED, GREEN, BLANK, YELLOW
}

用法二:switch
JDK1.6之前的switch語句只支持int,char,enum類型,使用枚舉,能讓我們的代碼可讀性更強。

Java代碼
enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}

用法三:向枚舉中添加新方法
如果打算自定義自己的方法,那麼必須在enum實例序列的最後添加一個分號。而且 Java 要求必須先定義 enum 實例。

Java代碼
public enum Color {
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變數
private String name;
private int index;
// 構造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}

用法四:覆蓋枚舉的方法
下面給出一個toString()方法覆蓋的例子。

Java代碼
public enum Color {
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變數
private String name;
private int index;
// 構造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//覆蓋方法
@Override
public String toString() {
return this.index+"_"+this.name;
}
}

用法五:實現介面
所有的枚舉都繼承自java.lang.Enum類。由於Java 不支持多繼承,所以枚舉對象不能再繼承其他類。

Java代碼
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour{
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變數
private String name;
private int index;
// 構造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//介面方法
@Override
public String getInfo() {
return this.name;
}
//介面方法
@Override
public void print() {
System.out.println(this.index+":"+this.name);
}
}

用法六:使用介面組織枚舉

Java代碼
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}

用法七:關於枚舉集合的使用
java.util.EnumSet和java.util.EnumMap是兩個枚舉集合。EnumSet保證集合中的元素不重復;EnumMap中的 key是enum類型,而value則可以是任意類型。關於這個兩個集合的使用就不在這里贅述,可以參考JDK文檔。
關於枚舉的實現細節和原理請參考:
參考資料:《ThinkingInJava》第四版
http://softbeta.iteye.com/blog/1185573

Ⅸ Java中如何調用枚舉類中的數組

values()是枚舉定義的一個靜態方法。
示例代碼:
enum A{
b,a;
}
static final class A extends Enum{
public static A[] values(){
A aa[];
int i;
A aa1[];
System.array(aa = ENUM$VALUES, 0, aa1 = new A[i = aa.length], 0, i);
return aa1;
}
public static A valueOf(String s){
return (A)Enum.valueOf(com/taobao/et/biz/Test$A, s);
}
public static final A b;
public static final A a;
private static final A ENUM$VALUES[];
static {
b = new A("b", 0);
a = new A("a", 1);
ENUM$VALUES = (new A[] {
b, a
});
}

private A(String s, int i) {
super(s, i);
}
}
兩個靜態方法「隱藏」在所有枚舉類型聲明中。因為它們是枚舉子類上的靜態方法,而不是Enum本身的方法,所以它們在java.lang.Enum的javadoc中沒有出現。
第一個是values(),返回一個枚舉類型所有可能值的數組。
第二個是valueOf(String arg0),為提供的字元串返回一個枚舉類型,該枚舉類型必須精確地匹配源代碼聲明。

Ⅹ java 枚舉數組的問題

枚舉enum是關鍵字,和private、public等一樣是關鍵字,不是enum類,
對於關鍵字,api沒有列出其介紹。

enumColor{//枚舉常量
red,green,black
}

Colorcolors[]=Color.values();

閱讀全文

與java數組枚舉相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:736
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163