zoukankan      html  css  js  c++  java
  • JAVA-集合-Set

     1 package test;
     2 
     3 import java.util.HashMap;
     4 import java.util.HashSet;
     5 import java.util.Iterator;
     6 import java.util.Set;
     7 import java.util.TreeSet;
     8 
     9 import domain.Student;
    10 
    11 public class SetDemo {
    12     public static void main(String[] args) {
    13         /*Set - 散列集合
    14          *     1.称之为是一个散列集合
    15          *     2.存储的元素是不重复的;如果添加重复元素,则会被覆盖
    16          *     
    17          * HashSet - 哈希散列
    18          *     1.HashSet存储元素的时候根据元素的哈希码来进行计算和存储的
    19          *     2.HashSet底层是基于HashMap来存储的。
    20          *     3.HashMap底层是依靠数组+链表存储,底层数组的初始容量是16
    21          *     4.数组的每一个位置上维系一个链表结构
    22          *     5.数组的每一个位置称之为一个bucket - 桶
    23          *         列举一个哈希散列:
    24          *         ----------------------------------------------------------
    25          *             0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 
    26          *             o2    o1
    27          *                   o3
    28          *         ----------------------------------------------------------
    29          *     添加元素:    
    30          *         o1 - 计算o1的哈希码 - 针对哈希码再次运算,使计算结果落在某个桶的编号上 
    31          *         放元素时,先拿这个元素和桶中已有的元素进行一一比较,如果当前元素和桶中的某个元素比较结果为true,则覆盖之前的元素
    32          *         如果是false,将这个新元素插入当前列表的尾部
    33          *     扩容机制:
    34          *         当已经使用的桶的数量/桶的总数量>加载因子时,就会进行扩容。
    35          *         加载因子:0.75F
    36          *         每一次扩容增加一倍,底层基于左移来运算
    37          *         扩容完成之后,所有的元素要重新计算重新分布-rehash(扩容)
    38          *     减少rehash的次数:
    39          *         1.增大初始容量
    40          *         2.适当提高加载因子:0.6-0.8
    41          *     6.同一个类的同一对象的哈希码一定是相同的,同一个类的不同对象哈希码一般是不同的
    42          *     7.元素个数越多的时候,rehash的效率就越慢
    43          *     8.加载因子越小,rehash的次数越大,同时导致空间的浪费;加载因子越大,在元素插入的过程中,比较次数越多
    44          *     9.JDK1.8中,当桶中元素超过8个的时候,会将当前桶中的链表扭转成一个红黑树;当红黑树中的节点个数不足7个的时候,扭转回链表
    45          *     
    46          * */
    47         HashSet<String> H1 = new HashSet<>();
    48         H1.add("衔春的燕想归巢");
    49         H1.add("衔春的燕想归巢");
    50         H1.add("燕归巢");
    51         H1.add("岳阳楼");
    52         System.out.println(H1);
    53         HashMap<Integer,String> H2 = new HashMap<>();
    54         H2.put(1, "十年之后");
    55         H2.put(2, "我们是朋友");
    56         H2.put(1, "还可以问候");
    57         System.out.println(H2);
    58         //遍历
    59         Set<Integer> keySet = H2.keySet();
    60         for (Integer integer : keySet) {
    61             System.out.println(H2.get(integer));
    62         }
    63         System.out.println("-----------------------------");
    64         Iterator<String> iterator = H1.iterator();
    65         while (iterator.hasNext()) {
    66             System.out.println(iterator.next());
    67         }
    68         /*    TreeSet
    69          *         1.会将放入其中的元素进行排序
    70          *         2.要求所放入的元素所对应的类必须实现Comparable接口
    71          *         3.TreeSet在底层采用的是二叉树结构
    72          *         4.TreeSet在放入元素的时候,实际上会跟元素进行比较,而在比较的时候调用的不是equals而是compareTo方法
    73          * */
    74             TreeSet<Student> T1 = new TreeSet<>();
    75             Student S1 = new Student(1,18,"男");
    76             Student S2 = new Student(2,19,"男");
    77             Student S3 = new Student(3,17,"女");
    78             
    79             T1.add(S3);
    80             T1.add(S2);
    81             T1.add(S1);
    82             System.out.println(T1);
    83             
    84     }
    85 }
  • 相关阅读:
    设计模式
    操作系统知识点梳理
    jvm面试题
    java排序算法之冒泡排序和快速排序
    使用RAS+AES对接口数据加解密
    MongoDB七-运维技术
    MongoDB三-高级操作
    MongoDB四-操作索引
    quartz详解3:quartz数据库集群-锁机制
    quartz详解4:quartz线程管理
  • 原文地址:https://www.cnblogs.com/xiaoluohao/p/11641067.html
Copyright © 2011-2022 走看看