繁体   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