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

Hashset,Treeset和LinkedHashset,Hashmap之间的主要区别是什么?它在Java中如何工作?

穆仲卿
2023-03-14
问题内容

我只知道LinkedHashSet插入时不允许重复的元素。但是,我不了解Hashset在Hava中如何工作?我知道哈希表中使用了哈希表,因此哈希表用于存储元素,这里也不允许重复的元素。然后,Treeset也类似于Hashset,它也不允许重复的条目,因此将看到唯一的元素,并且遵循升序。

关于HashMap,我还有一个疑问-
Hashmap不维护顺序。它可能具有一个null键和多个null值。我只是不明白这一点,这实际上意味着什么?有什么实际的例子吗?

我知道一点,Hashmap曾经基于此工作-
用于存储桶的键和值也具有唯一编号。这样就可以识别并从存储桶中获取键和值。当我将键/值对放在标识符为键的哈希码的存储桶中时。

例如:密钥的哈希码为101,因此将其存储在存储桶101中。一个存储桶可以存储多于键和值对。假设举个例子,对象1是“ A”,对象2是“ A”,对象3是“
B”,那么它具有相同的哈希码。因此,它通过在同一存储桶中共享相同的哈希码来存储不同的对象。我的疑问是,具有相同哈希码的对象应该相等,而不同对象应该具有不同的哈希码?

这是使用HashSet的程序:

    import java.util.*;
    public class Simple{
    public static void main(String[] args){
    HashSet hh=new HashSet();
    hh.add("D");
    hh.add("A");
    hh.add("B");
    hh.add("C");
    hh.add("a");        
    System.out.println("Checking the size is:"+hh.size()+"");
    System.out.println(hh);

    Iterator i=hh.iterator();
    while(i.hasNext()){
    System.out.println(i.next());
    }      
    }
    }

输出是

Checking the size is:5
[D, A, B, a, C]
D
A
B
a
C

我的疑问是,为什么在“ B”和“ C”之间插入“ a”。

现在,我正在使用LinkedHashSet,

public class Simple{
public static void main(String[] args){
    LinkedHashSet hh=new LinkedHashSet();
            hh.add("D");
            hh.add("A");
    hh.add("B");
    hh.add("C");
            hh.add("a");

        System.out.println("Checking the size is:"+hh.size()+"");
    System.out.println(hh);

    Iterator i=hh.iterator();
    while(i.hasNext()){
        System.out.println(i.next());
    }      
}
}

我只是理解,它遵循插入顺序,并且避免了重复的元素。所以输出是

Checking the size is:5
[D, A, B, C, a]
D
A
B
C
a

现在,使用树集:

import java.util.*;
public class Simple{
public static void main(String[] args){
    TreeSet hh=new TreeSet();
            hh.add("1");
            hh.add("5");
            hh.add("3");
            hh.add("5");
            hh.add("2");
            hh.add("7");

System.out.println("Checking the size is:"+hh.size()+"");
System.out.println(hh);

    Iterator i=hh.iterator();
    while(i.hasNext()){
        System.out.println(i.next());
    }      
}
}

在这里,我只知道-树集遵循升序。

The output is,
Checking the size is:5
[1, 2, 3, 5, 7]
1
2
3
5
7

然后我的疑问是,哈希集如何在Java中工作?而且我知道LinkedHashset遵循双重链表。如果它使用双向链表,那么它将如何存储元素?双向链表是什么意思,它是如何工作的?那么在Java中将使用这三个Hashset,Treeset,LinkedHashset的哪一个在Java中具有更好的性能呢?


问题答案:

我的疑问是,为什么在“ B”和“ C”之间插入“ a”。

TreeSet对条目进行排序。

LinkedHashSet保留插入顺序。

HashSet不保留插入顺序,也不对条目进行排序/排序。这意味着,当您遍历集合时,将按难以理解的顺序返回条目,并且没有实际意义。此时没有"a"插入任何特定的“原因”
。事实就是如此……给定了一组输入键及其插入顺序。

我唯一的疑问是,哈希集如何在Java中工作。

它实现了一个哈希表。阅读哈希表上的Wikipedia页面,以获取一般概述以及的源代码java.util.HashMapjava.util.HashSet详细信息。

简短的回答是,HashSetHashMap均作为哈希链阵列实现的哈希表。

而且我知道,LinkedHashset遵循双重链表。如果它使用双向链表,那么它将如何存储元素?

LinkedHashSet本质上是一个带有附加链表的哈希表,该链表记录了插入顺序。元素存储在主哈希表中……这就是提供快速查找的功能。同样,请参阅源代码以获取详细信息。

双向链表是什么意思,它是如何工作的?

阅读Wikipedia中的双向链接列表中的文章。

那么在Java中将使用这三个Hashset,Treeset,Linkedhashset的情况,哪个在Java中具有更好的性能呢?

在这三个类别(和其他类别)之间进行选择时,有很多事情要考虑:

  • 他们是否提供所需的功能。例如,我们已经看到它们在迭代顺序方面有 不同的 行为。

  • 它们是否具有必需的并发属性?例如,它们是线程安全的吗?他们处理争执吗?他们允许并发修改吗?

  • 他们需要多少空间?

  • 性能(时间)特征是什么?

关于最后两点?

  • A TreeSet使用最少的空间,而A LinkedHashSet使用最多的空间。

  • HashSet趋于为最快的查找,插入和删除较大套,以及TreeSet往往是最慢的。



 类似资料:
  • 本文向大家介绍Java中的HashMap和HashSet之间的区别。,包括了Java中的HashMap和HashSet之间的区别。的使用技巧和注意事项,需要的朋友参考一下 HashMap和HashSet都是Java Collection框架最重要的类之一。 以下是HashMap和HashSet之间的重要区别。 序号 键 哈希映射 哈希集 1 实作 Hashmap是Map接口的实现。 另一方面,哈希

  • 问题内容: 除了不允许重复值的事实之外,和之间有什么区别? 我的意思是实施明智?这有点含糊,因为它们都使用 哈希表 存储值。 问题答案: 它们是完全不同的构造。A 是的实现。一个地图键映射到值。密钥查找使用哈希进行。 另一方面,a 是的实现。一组被设计成一组的数学模型相匹配。一个不使用支持其实现,正如你指出。但是,它实现了完全不同的接口。 当您寻找最适合您的目的时,本教程是一个很好的起点。如果您真

  • 问题内容: Java中的Collection和Collections之间的主要区别是什么? 问题答案: 是大多数集合类的基本接口,而是实用程序类。我建议您阅读文档。

  • 本文向大家介绍详解Java中HashSet和TreeSet的区别,包括了详解Java中HashSet和TreeSet的区别的使用技巧和注意事项,需要的朋友参考一下 详解Java中HashSet和TreeSet的区别 1. HashSet HashSet有以下特点: 不能保证元素的排列顺序,顺序有可能发生变化 不是同步的 集合元素可以是null,但只能放入一个null 当向HashSet集合中存入一

  • 本文向大家介绍Java中LinkedList和LinkedHashSet之间的区别,包括了Java中LinkedList和LinkedHashSet之间的区别的使用技巧和注意事项,需要的朋友参考一下 LinkedList和LinkedHashSet都是Java Collection框架最重要的类之一。 以下是LinkedList和LinkedHashSet之间的重要区别。 序号 键 链表 链接哈希

  • 本文向大家介绍Kafka和Flume之间的主要区别是什么?相关面试题,主要包含被问及Kafka和Flume之间的主要区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 答:Kafka和Flume之间的主要区别是: 工具类型 Apache Kafka——Kafka是面向多个生产商和消费者的通用工具。 Apache Flume——Flume被认为是特定应用程序的专用工具。 复制功能 Apache