zoukankan      html  css  js  c++  java
  • Set 哈希码

    Set接口继承Collection接口,没有额外添加方法
    *特点:唯一(不重复),无序(位置顺序),无法通过下标索引获取元素
    *其下有三个常用的实现类
    *HashSet***
    * 常用的构造函数
    * HashSet():构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75。
    * HashSet(int initialCapacity):构造一个新的空 set,其底层 HashMap 实例具有指定的初始容量和默认的加载因子(0.75)
    * 常用的函数:
    * add(E e):如果此 set 中尚未包含指定元素,则添加指定元素。
    * size():获取容器中元素的个数
    * iterator():返回对此 set 中元素进行迭代的迭代器。
    * isEmpty():如果此 set 不包含任何元素,则返回 true。
    * contains(Object o) :如果此 set 包含指定元素,则返回 true。
    * remove(Object o):如果指定元素存在于此 set 中,则将其移除。
    * 遍历方式:
    * 1.使用for-each遍历
    * 2.使用迭代器进行遍历
    *TreeSet*
    *LinkedHashSet
    *
    */
    public class TestHashSet {
    public static void main(String[] args) {
    Set<String> set = new HashSet<String>();
    System.out.println("容器是否为空:"+set.isEmpty());
    set.add("java");
    set.add("oracle");
    set.add("html");
    set.add("java");
    System.out.println("元素的个数:"+set.size());
    System.out.println("容器是否为空:"+set.isEmpty());
    System.out.println("是否包含java:"+set.contains("java"));
    //1.使用for-each进行遍历
    for (String string : set) {
    System.out.println(string);
    }
    System.out.println("------");
    //2.使用迭代器进行遍历
    Iterator<String> iter = set.iterator();
    while(iter.hasNext()){
    String str = iter.next();
    System.out.println(str);
    }
    }
    }


    //采用迭代器:Iterator
    for(Iterator<String> iter = linkedHashSet.iterator();iter.hasNext();){
    String str = iter.next();
    System.out.println(str);

    /**
    * HashSet存储结构采用hashtable(哈希表+链表结构进行存储)
    * 优点:
    * 查询(哈希算法),添加,删除速(链表)度快
    * hashcode(哈希码):同哈希码计算对象的存储位置 y=k(x)
    * y:代表存储位置 x:哈希码
    * 缺点:无序(位置顺序),无法通过下标访问--->get(i)
    * 添加情况:添加时会计算存储位置--->获取哈希码--->通过调用hashcode()获取哈希码
    * 情况1:一次添加成功
    * 情况2:多次添加,存在重复,去掉重复项--->通过 equals()内容是否一致
    * 情况3:在相同位置,多次添加成功
    * hashcode()与equals()的关系
    * 1。hashcode相同,equals()是不一定相同
    * 2.equals()比较两个对象内容相同,hashcode是一定相同
    *
    *注意:
    *hashSet中去掉重复项会调用hashCode()和equals()
    *需要重写Object类中hashCode()和equals()
    *1.先调用hashCode()获取对象的hash码,如果hash码不相同,对象肯定不同,不再调用equals方法进行比较
    * 提高了效率:
    * 传统做法:如果要比较1000的对象,需要调用1000次的equals()方法
    * 使用hash码:先比较hash是否相同,如果hash码相同才调用equals进行比较
    *2.通过hash码计算存储位置: y=k(x)
    *
    * hashCode如何计算:
    * 1.Integer类型:用自身数值做hashcode
    * 2.Student
    *


    *
    * TreeSet:采用二叉树进行存储,实现类Set接口
    * 特点:唯一,有序(自然顺序)
    * 优点:
    * 查找效率比List要高,但没有HashSet高
    * 构造函数:
    * TreeSet():构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。
    * TreeSet采用的二叉树进行存放(对要保存的元素要求有大小顺序,如果要比较对象大小必须实现Compareable接口,重写compareTo方法
    TreeSet(Comparator<? super E> comparator)
    构造一个新的空 TreeSet,它根据指定比较器进行排序。
    java.util.Comparator:比较器接口,可能更加灵活的完成对象的比较

    *java.util.LinkedHashSet实现了Set接口,继承HashSet
    * Set:唯一
    * --HashSet:无序,唯一
    *
    * --TreeSet:唯一,有序(大小顺序)
    * ----LinkedHashSet:特点:唯一,有序(位置顺序)
    采用的存储为哈希表+链表的结构
    *
    * 常用的构造函数
    * LinkedHashSet():构造一个带默认初始容量 (16) 和加载因子 (0.75) 的新空链接哈希 set。
    * LinkedHashSet(int initialCapacity):构造一个带指定初始容量和默认加载因子 (0.75) 的新空链接哈希 set。
    * 常用方法:
    * add(E e):添加
    * remove(E e):移除指定元素
    * size():查看容器元素的个数
    * contains(E e):是否包含指定元素
    * iterator():返回一个迭代器






  • 相关阅读:
    配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法
    js 获取cookie
    jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
    既之前的基础,先写个简单的PHP 与数据库 的数据交流
    Web 后端--PHP 与数据库的交互
    MySQL 忘记密码怎么办?
    MySQL 继续-- Win7 安装及后续工作
    数据库初识--从MySQL 出发
    在PHP中使用MySQL Mysqli操作数据库 ,以及类操作方法
    电脑使用--快捷键等
  • 原文地址:https://www.cnblogs.com/seePoppy/p/6745350.html
Copyright © 2011-2022 走看看