[英]Java 7 - Pairing two ArrayLists
我有一个现有的 int 数组,比如int[] pageNumbers = {1, 2, 3}
。
我正在编写一些代码来查看这些页面并通过另一个 int 定义每个页面是什么,例如;
页面类型:
我想要解决的是,当我的代码确定了页面是什么时,我如何将页面和页面类型配对到一个数组中。
例如,如果第 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.