zoukankan      html  css  js  c++  java
  • Set集合、Map集合

     1、HashSet 集合

    ● 特点:

    底层数据结构:哈希表;存储、取出比较快;线程不安全,运行速度快(HashSet的底层是用HashMap实现的,因此查询效率较高,由于采用hashCode算法直接确定元素的内存地址,增删效率也挺高的)

    ● HashSet集合存储数据的结构(哈希表)

    哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会根据这些对象的特有数据结合相应的算法,计算出这个对象在数组中的位置,然后把这个对象存放在数组中。而这样的数组就称为哈希数组,即就是哈希表。

    当向哈希表中存放元素时,需要根据元素的特有数据结合相应的算法,这个算法其实就是Object类中的hashCode方法。由于任何对象都是Object类的子类,所以任何对象有拥有这个方法。即就是在给哈希表中存放对象时,会调用对象的hashCode方法,算出对象在表中的存放位置,这里需要注意,如果两个对象hashCode方法算出结果一样,这样现象称为哈希冲突,这时会调用对象的equals方法,比较这两个对象是不是同一个对象,如果equals方法返回的是true,那么就不会把第二个对象存放在哈希表中,如果返回的是false,就会把这个值存放在哈希表中。

    总结:保证HashSet集合元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。

    ● ArrayList 和 HashSet 判断元素重复

    ArrayList--contains(Object o)方法,本质:调用 equals()方法。

    HashSet--contains(Object o)方法,add(E e)方法。

    2、Map 集合

    ● 注意:Map 接口中的集合都有两个泛型变量<K,V>,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量<K,V>,的数据类型可以相同,也可以不同。

    ● Hashtable 是 Map 的子类,1.2版本后被 HashMap 取代,但是它的子类 Properties 依然在使用。

    3、jdk 1.5 新特性之静态导入

    作用:减少开发的代码量
    静态导入的语法:import static 包名.类名.静态成员变量;

            import static 包名.类名.静态成员函数;

    注意:导入的是成员变量和方法名。

    弊端:过度地使用静态导入会在一定程度上降低代码的可读性。

    ● 示例:

    1 import static java.lang.System.out;
    2 
    3 public class StaticImportDemo {
    4     public static void main(String[] args) {
    5         out.println("abc");
    6     }
    7 }

    4、Collections 类

    binarySearch() 找不到返回的结果:(-(insertion point) - 1)

  • 相关阅读:
    Kubernetes(K8S)集群部署搭建图文教程(最全)
    Kubernetes核心原理和搭建
    Navicat Premium 15注册出现“rsa public key not find”
    centos 7永久修改主机名
    docker 部署jenkins,及构建执行scp指令,一直处于构建状态以及钉钉通知配置
    jenkins 无法连接仓库:Command /usr/bin/git ls-remote -h
    mysql 8.0安装包下载地址
    centos7安装xtrabackup 物理备份工具与使用
    Linux vi/vim编辑器
    解决报错docker 启动报 WARNING: IPv4 forwarding is disabled. Networking will not work.
  • 原文地址:https://www.cnblogs.com/fanyizhan/p/10044390.html
Copyright © 2011-2022 走看看