Java 7 - 配对两个ArrayLists

时间:2017-10-18 17:41:43

标签: java arrays

我有一个现有的int数组,比如int[] pageNumbers = {1, 2, 3}

我正在编写一些代码来查看这些页面,并通过另一个int定义每个页面的内容,例如

页面类型:

  • 25 =首页
  • 50 =内容
  • 75 =指数

我正在努力解决的问题是,当我的代码确定了页面是什么时,如何将页面和页面类型配对到数组中。

例如,如果第1页是Front Page,第50页是Contents,第75页是Index,我想要下面定义的内容:

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

最后,一旦我有了这个数组,我怎么能得到这些值?比如,我想查看索引所在的页面,所以我会编写一个方法来查找数组中的索引,然后找到相邻的值,即页码。

3 个答案:

答案 0 :(得分:1)

您可以使用Map(也可能是ArrayList,而不是使用数组,具体取决于您计划索引的方式)。在Map中,每个值都“映射”到一个键,并通过引用键来访问值。

对于你的问题,它看起来像这样:

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

查看javadoc tutorial以获取使用Google地图的帮助

答案 1 :(得分:0)

您可以使用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 ) );

要遍历地图,即查看它存储的内容,您可以执行以下操作:

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中,然后迭代这个列表以找到您想要的页面,但对于您的问题,至少对我来说,使用Map似乎是一个更好的方法。

答案 2 :(得分:0)

  

我想要解决的是,当我的代码确定了页面是什么时,我如何配对页面和页面类型

您通常通过创建自定义类来保存属于的信息来执行此操作:

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);