簡體   English   中英

Java 7 - 配對兩個 ArrayList

[英]Java 7 - Pairing two ArrayLists

我有一個現有的 int 數組,比如int[] pageNumbers = {1, 2, 3}

我正在編寫一些代碼來查看這些頁面並通過另一個 int 定義每個頁面是什么,例如;

頁面類型:

  • 25 = 頭版
  • 50 = 內容
  • 75 = 索引

我想要解決的是,當我的代碼確定了頁面是什么時,我如何將頁面和頁面類型配對到一個數組中。

例如,如果第 1 頁是首頁,第 50 頁是目錄,第 75 頁是索引,我想要如下定義:

int[] pagesAndTypes = {(1, 25), (2, 50), (3, 75)};

最后,一旦我有了這個數組,我怎么能得到這些值呢? 例如,我想查看索引在哪個頁面上,所以我會編寫一個方法來查找數組中的索引,然后是相鄰的值,這將是頁碼。

您可以使用 Map(也可能是 ArrayList,具體取決於您打算如何編制索引)而不是使用數組。 在 Map 中,每個值都“映射”到一個鍵,並且通過引用鍵來訪問值。

對於您的問題,它看起來像這樣:

Map<Int, Int> map = new HashMap<Int, Int>();
map.put(1, 25);
map.put(2, 50);
map.put(3, 75);

查看javadoc 教程以獲取使用地圖的幫助

您可以使用 Map 將一個鍵與一個值相關聯。 在下面的代碼中,我使用 Map 將鍵存儲為整數,將值存儲為字符串。

Map<Integer, String> pageMap = new HashMap<>();

// inserting data
pageMap.put( 25, "Front Page" );
pageMap.put( 50, "Contents" );
pageMap.put( 75, "Index" );


// getting data
// will print Front Page
System.out.println( pageMap.get( 25 ) );

要遍歷 Map,即查看它存儲的內容,您可以執行以下操作:

for ( Map.Entry<Integer, String> e : pageMap.entrySet() ) {
    System.out.printf( "%d -> %s\n", e.getKey(), e.getValue() );
}

如果需要保留插入順序,則需要使用 Map 接口的 Linked 實現,例如 LinkedHashMap。 例如:

Map<Integer, String> pageMap = new LinkedHashMap<>();

當您遍歷此映射時,所有數據都將按插入順序顯示,因為它將保留此順序。 對於上面介紹的 HashMap,順序將取決於 HashMap 將如何存儲數據(基於關鍵對象的 hashCode)。

因此,如果您不關心插入數據的順序,請使用 HashMap。 如果要保留插入順序,請使用 LinkedHashMap。 那里將存儲數據。 Map 接口有很多不同的實現。 這些針對 Java 7 的實現可以在這里找到https://docs.oracle.com/javase/7/docs/api/java/util/Map.html

專門針對您的問題,您將遇到以下問題:

int[] pageNumbers = {1, 25, 3};
Map<Integer, String> pageMap = new HashMap<>();

// inserting data
pageMap.put( 25, "Front Page" );
pageMap.put( 50, "Contents" );
pageMap.put( 75, "Index" );

for ( int page : pageNumbers ) {
    String pageTitle = pageMap.get( page );
    if ( pageTitle != null ) {
        System.out.printf( "The title of the page %d is %s\n", page, pageTitle );
    } else {
        System.out.printf( "There is not a page title for the page %d\n", page );
    }
}

如前所述,您還可以創建一個專門的類來對這些數據(帶有標題或任何其他內容的頁碼)進行分組,將其存儲在一個 List 中,然后遍歷該列表以找到您想要的頁面,但對於您的問題,在至少對我來說,使用地圖似乎是一種更好的方法。

我想要解決的是,當我的代碼確定了頁面是什么時,我如何將頁面和頁面類型配對

您通常通過創建一個包含屬於一起的信息的自定義類來做到這一點:

class DocumentPart{
   int startPage;
   int partType;
}

然后你可以創建一個數組(或者更好的像List這樣的集合):

 List<DocumentPart> documentParts = new ArrayList<>();

你可以在那里放置你的元素:

     DocumentPart documentPart = new DocumentPart();
     documentPart.startPage=1;
     documentPart.partType=25;
     documentParts.add(documentPart);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM