zoukankan      html  css  js  c++  java
  • 集合04_Set

    Set集合总览

    集合元素无序、不重复,三个实现类都是线程不安全的,最好在创建时通过Collections工具类的synchronizedSortedSet方法来包装Set集合,防止对set集合的意外非同步访问。

    HashSet类

    1. 底层数据结构是哈希表(是一个元素为链表的数组) 和红黑树,按Hash算法存储元素,具有很好的存取和查找性能
    2. 判断相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode方法的返回值也相等
    3. 如果需要重写equals方法,则也需要重写hashCode方法,保证对象相等(HashMap也是)
    4. 核心要点如下:
      • 集合元素可以为null
      • 不保证迭代顺序
      • 初始容量影响迭代性能
      • 底层封装了HashMap,操作HashSet实际是操作HashMap
      • 使用HashMap的put方法,同时使用了==和equals方法判断键是否相等,仅修改了无用的value值,因此对相同元素根本没插入

    LinkedHashSet类

    1. 底层数据结构是哈希表和双向链表
    2. 根据元素的hashCode值决定存储位置,使用链表维护次序,以插入顺序保存,在迭代访问全部元素时有很好的性能
    3. 核心要点如下:
      • 集合元素可以为null
      • 保证迭代顺序
      • 迭代双向链表,初始容量不影响性能
      • 需要维护双向链表,性能略差于HashSet
      • 底层封装了HashMap和双向链表

    EnumSet类

    1. 元素为同类型的枚举值,有序,在内部以单位向量的形式存储,占内存小,运行效率好,尤其是进行批量操作时。
    2. 不允许加入null值,应该通过提供的类方法创建对象。

    TreeSet类

    1. 底层数据结构是红黑树(是一个自平衡的二叉树),集合元素按大小排序

    2. 判断相等的标准是通过compareTo方法比较返回0

    3. 核心要点如下:

      • 集合元素不允许为null
      • 由于每添加一个元素都要调用该对象的compareTo(Object obj)方法与集合中其他元素比较,所以TreeSet只能添加同一种类型的对象
      • 底层封装了TreeMap
    4. 提供多种方法,如:

      • Object first()
      • Object last()
      • Object lower(Object e)
    5. 利用lambda表达式定制排序

      import java.util.TreeSet;
      
      public class Customer {
      private String name;
      private int age;
      
      public Customer(int age) {
      	this.age = age;
      }
      
      public String toString() {
      	return "[Customer:" + age + "]";
      }
      public static void main(String[] args) {
      	TreeSet<Customer> tsCustomers = new TreeSet<>((o1,o2) -> {
      		Customer c1 = (Customer)o1;
      		Customer c2 = (Customer)o2;
      		return c1.age > c2.age ? -1
      				:c1.age < c2.age ? 1 : 0;
      	});
      	
      	tsCustomers.add(new Customer(10));
      	tsCustomers.add(new Customer(20));
      	System.out.println(tsCustomers);
      }
      }
      

    输出结果为:

  • 相关阅读:
    spark的做算子统计的Java代码(在Linux系统集群式运行)
    http协议面试题
    vue响应式原理
    vue-cli3搭建vue项目
    vscode中自定义代码片段
    vue中常用的全局配置
    tomcat安装配置
    Git相关
    nginx配置文件详解
    nginx源码安装
  • 原文地址:https://www.cnblogs.com/pycrab/p/8933313.html
Copyright © 2011-2022 走看看