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 }
  • 相关阅读:
    高级特性(4)- 数据库编程
    UVA Jin Ge Jin Qu hao 12563
    UVA 116 Unidirectional TSP
    HDU 2224 The shortest path
    poj 2677 Tour
    【算法学习】双调欧几里得旅行商问题(动态规划)
    南洋理工大学 ACM 在线评测系统 矩形嵌套
    UVA The Tower of Babylon
    uva A Spy in the Metro(洛谷 P2583 地铁间谍)
    洛谷 P1095 守望者的逃离
  • 原文地址:https://www.cnblogs.com/xiaoluohao/p/11641067.html
Copyright © 2011-2022 走看看