猿问

使用 HashMap 的/HashSet 的 hashCode() 函数对数据进行排序

我一直在尝试创造性地使用散列函数和散列图。现在我想知道是否有办法通过强制冲突来存储和排序数据。


例如,输入是一个巨大的字符串列表,目标是打印出每个长度为 X 的字符串。如果我使用 HashCode 将所有字符串存储在 HashSet 中...


  @Override

   public int hashCode() {

       return s.length();

   }

然后,我会将所有内容按其长度编入索引。然后理论上如果我想要所有长度为 3 的字符串,我会得到索引为 3 的字符串列表。


我将如何获得索引中的列表?这会是一个好主意吗?


繁星淼淼
浏览 112回答 1
1回答

慕无忌1623718

这不是目标hashcode()。此外,在 HashMaps 中,对象未排序。在内部是的,因为它们存储在数组中(通过哈希码的提醒),但该类不提供任何对其元素的索引访问。但是您可以扩展 a Map<Integer, List<String>>,您可以在其中将长度映射n到 lenght 字符串列表n,并实现此附加方法:public void add(String s) {&nbsp; &nbsp; // null check here&nbsp;&nbsp; &nbsp; List<String> list = get(s.length);&nbsp; &nbsp; if (list == null) {&nbsp; &nbsp; &nbsp; &nbsp; list = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; put (s.lenght, list);&nbsp; &nbsp; }&nbsp; &nbsp; list.add(s);}然后像这样使用它:map.add("hello");map.add("world");map.add("knife");map.add("good");map.add("day");map.get(5); // return list of hello, world, knife
随时随地看视频慕课网APP

相关分类

Java
我要回答