zoukankan      html  css  js  c++  java
  • 遍历一个Set的方法只有一个:迭代器(interator)

    Set-HashSet实现类:

    遍历一个Set的方法只有一个:迭代器(interator)。

    HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复。

    在Object中除了有final(),toString(),equals(),还有hashCode()。

    HashSet底层用的也是数组。

    当向数组中利用add(Object o)添加对象的时候,系统先找对象的hashCode:

    int hc=o.hashCode(); 返回的hashCode为整数值。

    Int I=hc%n;(n为数组的长度),取得余数后,利用余数向数组中相应的位置添加数据,以n为6为例,如果I=0则放在数组a[0]位置,如果I=1,则放在数组a[1]位置。如果equals()返回的值为true,则说明数据重复。如果equals()返回的值为false,则再找其他的位置进行比较。这样的机制就导致两个相同的对象有可能重复地添加到数组中,因为他们的hashCode不同。

    如果我们能够使两个相同的对象具有相同hashcode,才能在equals()返回为真。

    在实例中,定义student对象时覆盖它的hashcode。

    因为String类是自动覆盖的,所以当比较String类的对象的时候,就不会出现有两个相同的string对象的情况。

    现在,在大部分的JDK中,都已经要求覆盖了hashCode。

    结论:如将自定义类用hashSet来添加对象,一定要覆盖hashcode()和equals(),覆盖的原则是保证当两个对象hashcode返回相同的整数,而且equals()返回值为True。

     1 package TomTexts;
     2 
     3 public class TomTexts_13 {
     4     public static void main(String args[])
     5     {
     6         int b[][]={{11},{21,22},{31,32,33,34}};
     7         int sum=0;
     8         System.out.println("数组b的行数:"+b.length);
     9         for(int I=0;I<b.length;I++)
    10         { 
    11             System.out.println("b["+I+"]行的数据个数:"+b[I].length);
    12             for(int j=0;j<b[I].length;j++)
    13             {
    14                 sum=sum+b[I][j];
    15             }
    16         }
    17         System.out.println("数组元素的总和:"+sum);
    18     }
    19 
    20 }
  • 相关阅读:
    做别人的舔狗还是让别人成为你的舔狗
    手机控制电脑第二弹之HIPC
    让你的手机缓存视频在电脑上播放
    Premiere Pro 2020安装教程
    Git与GitHub入门基础(二)
    Git与GitHub入门基础(一)
    题解-CF755G PolandBall and Many Other Balls
    题解-CF348E Pilgrims
    [AHOI2008]上学路线(最短路+最小割)
    [AHOI2014/JSOI2014]骑士游戏(SPFA认识)
  • 原文地址:https://www.cnblogs.com/borter/p/9420358.html
Copyright © 2011-2022 走看看