当前位置: 首页 > 面试题库 >

告诉HashSet如何对数据进行排序

华坚成
2023-03-14
问题内容

我正在尝试创建一个HashSet(或任何集合类型-
但我认为HashSet最适合我),无论插入什么,它都将保持顺序。这是我正在从事的联系人管理器项目。我一直在尝试以下示例。

import java.util.*;

public class TestDriver{

    public static void main(String[] args)
    {
        FullName person1 = new FullName("Stephen", "Harper");
        FullName person2 = new FullName("Jason", "Kenney");
        FullName person3 = new FullName("Peter", "MacKay");
        FullName person4 = new FullName("Rona", "Ambrose");
        FullName person5 = new FullName("Rona", "Aabrose");


        HashSet<FullName> names = new HashSet<FullName>();

        names.add(person3);
        names.add(person1);
        names.add(person4);
        names.add(person2);

        System.out.println(names);      
   } 
}

我希望输出将名称按字母顺序排列-至少根据其名字或姓氏。但是,我什至无法辨别用于此排序的HashSet方法。

[Jason Kenney, Rona Ambrose, Stephen Harper, Peter MacKay]

我的问题是,如何告诉程序如何根据规范对名称进行排序?


问题答案:

HashSet不会为条目提供任何有意义的顺序。该文档说:

它不保证集合的迭代顺序。特别是,它不能保证顺序会随着时间的推移保持恒定。

为了获得合理的排序,您需要使用其他Set实现,例如TreeSet或ConcurrentSkipListSet。这些SortedSet接口的实现使您可以提供一个Comparator,该Comparator指定如何对条目进行排序。就像是:

public class SortByLastName implements Comparator<FullName>{
    public int compare(FullName n1, FullName n2) {
        return n1.getLastName().compareTo(n2.getLastName());
    }
}

TreeSet<FullName> names = new TreeSet<FullName>(new SortByLastName());

您可以改为使FullName类实现Comparable接口,但是如果您希望有时按姓氏,有时按名或其他条件排序,这可能无济于事。



 类似资料:
  • 问题内容: 这是我需要做的。 我在Java中有一个列表,可以将其转换为逗号分隔的ID字符串,例如“ 3,4,5,6,1,2” 我想知道是否有办法将该字符串传递给oracle,并根据该字符串的排序顺序对sql代码进行排序? 所以这个查询: 将导致此顺序 问题答案: 如果可以在Java中修改查询,则可以执行以下操作: 您必须为列表中的每个元素在order by子句中放入一个解码。每次解码中的第二个参数

  • 问题内容: 该问题旨在作为有关PHP中数组排序问题的参考。容易想到您的特定案例是独特的,值得提出新的问题,但是实际上大多数都是此页面上一种解决方案的细微变化。 如果您的问题作为该问题的重复而被关闭,请仅在您可以解释为什么该问题与以下所有内容明显不同时才要求重新提出您的问题。 如何在PHP中对数组排序? 如何在PHP中对 复杂 数组进行排序? 如何在PHP中对对象数组进行排序? 有关使用PHP现有功

  • 问题内容: 考虑以下是我的数组 创建了它,就像下面的代码一样: 现在,我正在尝试根据字段进行排序。 所需输出: 关于Java&Gson,谁能以最好的方式帮助解决这个问题? 非常感谢您的投入。 问题答案: 首先,解析JSON的正确方法是创建一个类来封装数据,例如: 然后: 现在您有了一个,并且想要按属性的值对其进行排序,因此可以按照此处的说明使用: 最后:

  • 问题内容: 如果我使用JPA(EclipseLink)创建表,则String类型将导致varchar2(255)。我如何告诉JPA(通过注释)创建varchar2(20)属性。 如果我有一个列表,JPA将创建一个BLOB(4000),但我想要一个varchar2(我的序列化对象的字符串很短) 这怎么可能?我需要手工做吗? 问题答案: 您需要使用@Column批注的columnDefinition属

  • 问题内容: 首先,我发布此内容是因为当我在寻找以下问题的解决方案时,我在stackoverflow上找不到该解决方案。因此,我希望在此处增加一些知识库。 我需要处理目录中的某些文件,并且需要对文件进行数字排序。我在wiki.python.org上找到了一些有关排序的示例(尤其是使用模式),并将它们放在一起: 我对Python还是很陌生,想问一下社区是否可以对此进行任何改进:缩短代码(删除),性能,

  • 问题内容: 我试图根据键中的日期对此HashMap进行排序 我的哈希图: 问题答案: 使用代替。正如已经实现的那样,它将在插入时自动排序。 或者,如果您有一个现有的并且想要基于它创建一个,则将其传递给构造函数: 也可以看看: Java教程-地图实现 Java教程-对象排序