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 }
  • 相关阅读:
    关于最近
    Cryptography Application Block
    关于修改SQL SERVER 登陆模式
    我与软件工程
    JAVA之路(一)
    C#基础:类的继承与多态
    简述java语言的特点
    简述java虚拟机的工作原理
    阿里云盾特点及防DDoS攻击服务介绍
    智能DNS
  • 原文地址:https://www.cnblogs.com/borter/p/9420358.html
Copyright © 2011-2022 走看看