`

Set集合的简单总结

阅读更多

hashSetTreeSet的区别:

1HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,用的是key

2hashSetTreeSet都的元素都具有唯一性,TreeSet多了一个排序功能;

3HashCodeequals是提供给HashSet用的,因为不需要排序所以只要关注唯一性即可,

hashCode是用来计算hash值的,hash值是用来确定hash表索引的,具有在内存中定位对象位置的功能

hash表中一个索引处存放一个链表,所以需要通过equal方法循环比较链表上的每一个对象才可以确定键值对应的实体(Entity)

put时如果hash表中没有定位到,则新增一个实体并返回null,如果定位到了则覆盖原来的值,并返回原来的值;

TreeMap使用comparator对键值进行排序,Comparator可以在创建键值的时候指定,如果创建的时候没有指定就使用key.compareTo方法,这就要求key必须实现Comparable接口;

TreeMap使用Tree数据结构实现的,所以使用comparator接口就可以了

 HashCode冲突问题:

综述:通过一定的算法将keyhashCode转换成数组的index;将keyvaluehashcode保存到数组的index位置上;

Hashcode冲突问题:

1、  某些keyhashcode相同

2、  Hashcode不同,但通过了一定的算法映射到数组上的index相同

HashMap的解决方法:

a、  hashMap本身数据结构:

使用Entry存储数据的,Entry封装了HashMapkeyvaluehash值,next指针

b、  存储过程:

根据hashCode得到存储位置index后存储的不仅仅是改元素的keyvaluehash值还有

指向下一个entry的引用;如果出现了hashcode冲突问题则新建一个entry对象,将改entry的对象指向已存在的entry;一个index指向的可能不是一个entry;也有可能是一个entry链,如下图:

 HashSet存储结构

c、取值过程:

还是hash—index---entry的过程,不是直接returnindex上的entry对象,而是检查entry链上真正对应的那个entry对象

hashMapget(key)方法说明:

1、  根据key算出hash

2、  根据hash值算出数组的index

3、  根据index获取一个Extry链,Entry<K,V> e = table[indexFor(hash, table.length) ,如上图浅蓝色部分

4、  遍历entry对象,通过keyequal方法找到key对应的value

Set是如何实现排序的:

HashSet是按照hash值排序的,不保证集合的迭代顺序,不保证该顺序的恒久不变,允许null元素;

TreeSet 按照元素的自然顺序排序或者按照构造时传入的比较器进行排序

LinkedHashSet 按照插入的顺序排序

分享到:
评论

相关推荐

    Java中的集合学习总结

    - **集(Set)**:Set集合的特点是它不允许存储重复元素,同时也不保证元素的顺序。这意味着一旦将重复的元素添加到Set集合中,原有的元素会被新添加的元素覆盖。 - **列表(List)**:List集合则与Set相反,它不仅允许...

    Java集合类总结

    Java集合类框架为开发者提供了丰富的工具箱,使得处理不同场景下的数据变得简单高效。理解集合类的基本概念和用法对于每一个Java开发者来说都是必不可少的技能。通过本文的介绍,希望能帮助读者建立起对Java集合框架...

    java集合Collection总结

    集合提供了更丰富的操作,如排序、过滤等,而数组操作相对简单。 以上只是Java集合框架中Collection接口及其相关子接口和实现类的基础知识。在实际开发中,我们需要根据具体需求选择合适的集合类型,合理利用其特性...

    精通java集合框架--List,Set..

    ### 精通Java集合框架——List, Set, Map #### 概述 Java集合框架是一种高度抽象且灵活的数据组织工具,它通过一系列接口来...无论是简单的数据存储还是复杂的业务逻辑处理,Java集合框架都能提供相应的解决方案。

    Java集合类详解总结

    ### Java集合类详解总结 在Java编程中,集合框架(Collection Framework)是处理一组对象的强大工具,它提供了标准的数据结构来存储和操作这些对象。Java集合框架主要包括`Collection`、`Set`、`List`、`Queue`、`...

    Java集合框架使用总结

    通过以上总结,我们可以看到Java集合框架为Java开发者提供了极其丰富的工具箱,无论是处理简单的数据结构还是复杂的键值对映射,都有合适的选择。了解并熟练掌握这些概念和技术,对于提高编程效率和编写高质量的Java...

    求两集合的交集 求两个集合的交集

    总结起来,C++ 中求两个集合交集的方法主要包括使用`std::set_intersection`函数以及手动迭代比较。前者在效率和简洁性上更具优势,后者则更为灵活,适应性更强。在实际应用中,应根据具体需求选择合适的方法。在...

    Java集合排序及java集合类详解(Collection、List、Map、Set)

    #### 总结:集合框架中常用类比较 在Java集合框架中,不同类型的容器具有各自的特点和适用场景: - `List`适合于存储有序且可能重复的数据,如购物车中的商品列表。 - `Set`适合于去重和进行集合运算,如统计...

    Java集合排序及java集合类详解(Collection、List、Map、Set)借鉴.pdf

    总结来说,Java集合框架提供了丰富的数据结构和操作方式,无论是简单数据的存储还是复杂数据的处理,都能找到合适的解决方案。熟练掌握和运用集合框架,能够显著提高代码的可读性和效率,是Java程序员必备的技能。...

    JAVA中的集合和js中集合

    - **`Set`**:类似于Java中的`Set`,但JavaScript的`Set`允许更简单的构造和管理。 - **`Map`**:类似于Java中的`Map`,JavaScript的`Map`提供了键值对的存储方式,支持任意类型的键。 ### 总结 通过上述介绍,...

    泛型集合项目练习

    总结来说,这个“泛型集合项目练习”涵盖了面向对象编程中的类设计,以及.NET泛型集合的使用,包括`Dictionary`用于关联数据,`List`用于顺序数据存储,以及`StreamWriter`用于数据输出。通过实践这些知识点,你可以...

    简单的sql语句集合(自己总结)

    9. **UPDATE语句**:更新已有记录,如`UPDATE employees SET salary = 6000 WHERE name = 'John Doe';`将把John Doe的工资改为6000。 10. **DELETE FROM语句**:删除表中的记录,如`DELETE FROM employees WHERE id...

    Java集合框架常见面试题.pdf

    3. Set集合: - Set接口继承了Collection接口,不允许存储重复的元素,主要用于实现数学上的集合概念。 - Set接口的主要实现类有HashSet、LinkedHashSet和TreeSet。 - HashSet是基于HashMap实现的,插入效率高,...

    Java集合详解,详细讲解java的集合类

    总结一下,Java集合框架为开发者提供了丰富的选择,可以根据实际需求选择合适的集合类型。了解它们的特性和性能特点对于优化代码和提高程序效率至关重要。无论是处理简单的数据集还是复杂的对象关系,Java集合都能...

    java集合知识大全

    `Collection` 接口是集合框架中最基础的接口之一,它是所有单列集合(如List和Set)的根接口。`Collection` 接口定义了一些基本的操作方法,如添加(add)、删除(remove)、查找(contains)等。 #### 四、List接口 `...

    最小集合覆盖

    1. **初始化**:定义了若干基本数据结构,如`vector&lt;set&lt;int&gt;&gt; vs`表示输入的所有集合,`bitset&lt;MAXNUM&gt;`用于存储位图表示的集合状态。 2. **并行环境设置**:使用MPI初始化并获取当前进程的排名(rank)和总进程数量...

    java基本集合类,java基本集合类

    总结来说,选择哪种集合类取决于具体的需求,如是否需要保持元素顺序、是否允许重复元素、是否关心线程安全以及性能要求等。理解这些基本集合类的特性和工作原理,可以帮助我们更有效地使用Java集合框架来解决实际...

    使用集合组织相关数据

    在编程领域,集合是一种强大的工具,用于组织和管理相关数据。...总结,掌握集合这一数据结构对于理解和编写高效的Python代码至关重要。通过深入学习和实践,你可以更好地利用集合解决实际问题,提高代码质量和效率。

Global site tag (gtag.js) - Google Analytics