繁体   English   中英

如何链接 java 中的两个列表?

How to link two lists in java?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试在程序中创建一种高分系统。 我有一个分数列表,然后是一个名字列表。 我想将分数和名称添加到 ArrayList 的末尾,然后使用 collections 对分数列表进行排序。 问题是我需要以完全相同的方式对名称列表进行排序。

开始 [1, 3, 2] ["name 1", "name 2", "name 3"]

排序 [3, 2, 1] ["name 2", "name 3", "name 1"]

像那样。

6 个回复

您可以将 map 每个名称作为 int 进行排序,然后按值对 map 进行排序

import Java.util.HashMap;

HashMap<String, Integer> scoresMap = new HashMap<String, Integer>();

//add a value into a map like this
scoresMap.put("name 1", 3);

//then make a function to sort the map
HashMap<String, Integer> sortedScoresMap;
sortedScoresMap = sortMapByValue(scoresMap);

您可能应该使用Map - Map javadoc

我会使用username作为键,你可以输入分数作为value

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

要插入新分数,请使用:

if (!score.keySet().contains("username")) score.put("username", 10);

迭代和更新:

if (score.keySet().contains("username")) score.replace("username", newScore);

您可以尝试存储包含名称和分数的 object 列表,而不是将它们存储在单独的列表中。 然后,您可以通过比较器来使用分数对列表进行排序。

为什么不创建一个处理名称和分数的“playerScore”object,并将这个 object 放入数组中,并使用“getScore()”方法进行排序? 这样,您将始终只有一个列表和一个 object 来处理它。 如果你使用 map 在 map 中输入名称和使用分数作为值,你会遇到两个相同分数的玩家的问题,例如,注意这一点。

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class so65891032 {
    public static void main(String[] args) {
        List<ScoreDetails> scores = new ArrayList<>();
        //Add scores using add()

        var sortedScores = scores.stream()
                .sorted()//Uses comparable, use this one or one below
                .sorted(ScoreDetails.SCORE_COMPARATOR)//Uses Comparator
                .collect(Collectors.toList());
    }
}

class ScoreDetails implements Comparable<ScoreDetails> {
    public static final Comparator<ScoreDetails> SCORE_COMPARATOR = new Comparator<ScoreDetails>() {
        @Override
        public int compare(ScoreDetails o1, ScoreDetails o2) {
            return o1.score - o2.score;
        }
    };

    public String name;
    public int score;

    @Override
    public String toString() {
        return name + " " + score; //Will print out in the format you are looking for
    }

    @Override
    public int compareTo(ScoreDetails other) {
        return score - other.score;
    }
}

使用流可以进行排序。 sorted 方法可以采用可以匿名定义的比较器,或者如果您打算重复使用它,您可以将其存储为常量。 在这里,我让它变得简单,只是在ScoreDetail class 上实现了Comparable

另一点,如果您想始终确保它按分数排序,您可能需要考虑一种比List[] (数组)更适合您需求的数据结构。 我在这里的假设是您只需要在特定点对其进行排序,否则您将保持某种顺序。 我们没有足够的信息来确定问题中的那个。

为了以您要求的格式打印出字符串。 我已经覆盖了ScoreDetailstoString()方法,因此许多常见的 output 函数将显示您要查找的内容。

我会将您的记分牌存储在 Map 中,其中键是名称,值是分数而不是两个列表。

然后这个 map 按值排序

Map<String, Integer> scoreboard = new HashMap<>();
scoreboard.put("name 1", 1);
scoreboard.put("name 2", 3);
scoreboard.put("name 3", 2);

LinkedHashMap<String, Integer> sortedScoreboard = scoreboard.entrySet()
    .stream()
    .sorted(Map.Entry.<String, Integer> comparingByValue().reversed())
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        Map.Entry::getValue, 
        (e1, e2) -> e1, LinkedHashMap::new));

结果:

{name 2=3, name 3=2, name 1=1}
1 Java中的链接列表-比较两个列表

我需要在Java中创建一个检查两个字符列表的递归方法。 如果第二个列表至少一次包含第一个列表中的所有字符,并且顺序相同,则应返回true,否则应返回false。 例如: 列表1:“ abbcd”(节点中的每个字符),列表2:“ abbcccddd”(节点中的每个字符)这应该返回true ...

2011-07-20 20:34:06 2 1332   java
3 如何在Java中同时对两个列表排序?

我有两个列表:1.带单词2.带有各自的频率计数 现在,我想对两个列表进行降序排序,以使第一个列表中的单词索引与包含频率计数的第二个列表的索引匹配。 添加功能: 这里排序的是包含单词频率的列表,而键是包含单词的列表。 ...

4 如何在Java中合并两个列表?

我想将列表1中的空值替换为从列表2的同一列中核心扩展它们的值,结果将存储在列表3中。 结果: 我应该如何进行? 更新 我的代码: ...

5 如何在Java中的链接列表中使用两个不同的迭代器?

我想使用链表来执行元素的提取和插入,尝试启发式的所有组合。 链接列表对于此类操作更有效。 因为我想尝试所有可能的提取/插入对,我在列表中使用了两个不同的迭代器。 这引发了“ConcurrentModificationException”。 如何在不重新遍历列表的情况下有效地执行此操作,因 ...

7 检查Java中两个链接列表之间的子集

我试图编写一个布尔方法isSubset(如果集合A中的每个元素都在集合B中,则返回一个布尔值,否则返回false),其中方法调用可以像这样setA.subsetOf(setB)编写。 我的想法是提取setA的每个元素,并将其与setB进行比较。 如果setA的第一个元素与setB中的任何一个 ...

8 Java:两个链接列表中的同一组对象

我想在二维(x和y)中对2D节点(点)进行排序,并允许快速添加和删除。 我可以说这可以通过两个链接列表来完成,但是发现Java的LinkedList对用户隐藏了链接。 即,如果找到某个节点并将其从一个列表中删除,则无法从另一个列表中快速删除它。 这是可以解决的,还是我需要编写自己的类来 ...

9 使用Java合并两个链接列表

试图找出代码中我所缺失的内容,该内容应该将链表2合并到链表1的末尾。现在,它只是获取第二个列表中的最后一个元素并返回它。 我尝试使用的逻辑是沿着第一个列表(L1)向下移动,并将这些元素一个一个地添加到new_list中,然后在到达L1末尾后对第二个列表(L2)进行相同的操作。 我也试图避 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM