当前位置: 首页 > 知识库问答 >
问题:

如何在Java中对应不同数组列表中的元素

东弘扬
2023-03-14

我有两个ArrayLists:一个字符串列表和一个整数列表。例如:

Bob        2
Kevin      6
Lane       4
Susan      2
//the ArrayLists will have more elements

我正在尝试对整数ArrayList进行排序(使用MergeSort)并使字符串ArrayList与整数ArrayList相对应,例如:

Susan      2
Bob        2
Lane       4
Kevin      6

我得到的其他答案建议使用映射(int是键,String是值);但是,我不能这样做,因为会有重复的密钥。

我读过关于番石榴的多地图;但是,我不太喜欢将jar文件包含到类路径中。

有没有其他办法可以做到这一点?

共有2个答案

家经纶
2023-03-14

其中一种使用方法是真正简单的hashmap,例如:

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;

public class ExStringArraySort {

    static HashMap<String, Integer> mapPerson = new HashMap<String, Integer>();
    static String[] prsn;

    public static void main(String[] args) {
        // Add persons
        mapPerson.put("Bob", 2);
        mapPerson.put("Kevin", 6);
        mapPerson.put("Lane", 4);
        mapPerson.put("Susan", 2);

        String[] prsn = mapPerson.keySet().toArray(new String[mapPerson.size()]);

        Arrays.sort(prsn);
        System.out.println(Arrays.toString(prsn));

        System.out.println("Print detail:");
        for (int i = 0; i < prsn.length; i++) {
            System.out.println(prsn[i]+"\t"+mapPerson.get(prsn[i]));
        }

        Arrays.sort(prsn, Collections.reverseOrder());
        System.out.println("\n"+Arrays.toString(prsn));
        System.out.println("Print detail:");
        for (int i = 0; i < prsn.length; i++) {
            System.out.println(prsn[i]+"\t"+mapPerson.get(prsn[i]));
        }

    }

}

输出:

[Bob, Kevin, Lane, Susan]
Print detail:
Bob 2
Kevin   6
Lane    4
Susan   2

[Susan, Lane, Kevin, Bob]
Print detail:
Susan   2
Lane    4
Kevin   6
Bob 2
长孙永思
2023-03-14

只要字符串和int之间确实存在某种有意义的联系,最好的方法就是创建一个Java类来满足您的需要,比如:

public class MyClass implements Comparable<MyClass> {
    private String myString;
    private int myInt;

    public MyClass(String s, int x) {
        myString = s;
        myInt = x;
    }

    public int getInt() {
        return myInt;
    }

    public String getString() {
        return myString;
    }

    public void setInt(int x) {
        myInt = x;
    }

    public void setString(String s) {
        myString = s;
    }

    // this method is the only method defined in the Comparable<T> interface
    // and is what allows you to later do something like Collections.sort(myList)

    public int compareTo(MyClass other) {
        return myInt - other.getInt();
    }
}

然后创建一个列表list ls=new arraylist (); ,您可以将新创建的类的实例添加到该列表中。

这个类实现了Comparable接口,这意味着您可以使用Java预定义的排序方法,如Collections.sort(),并让Collections类知道您希望对象如何排序。如果您宁愿实现自己的排序算法,则实现此接口并不是必需的,但仍然是一种良好的做法。

 类似资料:
  • 我是Java和Stack Overflow的新手,我有一个关于排列的问题。 方法:我使用中的对象生成。每个的大小从(可能最小为1)到,并包含具有唯一名称属性的自定义生成对象。 问题:现在我的问题是如何在我的外部(y轴)中获得从第一个到最后一个的所有可能对象组合的排列(我想我们可以说这是x轴)? 我试着举一个简单的例子: : 1.1|1.2|1.3 : 2.1 : 3.1|3.2 这里,这些位于外部

  • 我试图将输入与arraylist中的值进行比较。 前任;我有一个arraylist: 数组的每个索引在我的程序中代表一个唯一的属性。e、 g索引0代表,索引1代表等。如果我做返回第二个数组。 我正在尝试将与每个数组中的第二个元素进行比较。所以假设我运行这个,我希望它遍历每个数组中的每个[1],如果该索引匹配,则返回true。 因此,我希望它将'number'(1102)与每个第一个索引元素进行比较

  • 我已经创建了一个的数组: 我的问题是现在如何访问其中一个数组的元素。例如,我可以通过以下方式访问(或在示例打印中)整个数组元素: 但是如何访问所拥有的数组中的第一个元素呢?我尝试了所有方法,比如,但当数组是链接列表的元素时,我不知道如何访问数组中的元素。

  • 与我之前的帖子相似,我试图开发一个纸牌游戏: a)打印出整副牌 接下来,私有静态int numPairs(ArrayList cards)是一个计算卡片中卡片对数量的方法。如果两张牌等级相同,则两张牌成对。牌中三张相同等级的牌计为1对。如果相同等级的四张牌都在牌中,则有2对牌。这里的问题是,我不确定如何用我编写的代码将3张等级相同的牌计数为1对,并且仍然会出现表示字段card.rank不可见的错误

  • 我想在全局范围内使用一个数组,以便能够用不同的方法修改它,并在最后用主调用方法

  • 我有一个类来代表一个玩家的手牌。但是,我(在另一个类中)有一个数组列表,我想在其中表示一堆玩家手。问题是我不知道如何在多手牌的数组列表中将一张牌添加到手牌中。我有一个代表卡牌和一副牌的类,效果很好。我只是试图了解如何将对象添加到数组列表中的对象。谢谢!