码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-08-04 23:24:15      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:ash   不可   style   ati   length   print   对象   定义类   整数   

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 }

 

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

标签:ash   不可   style   ati   length   print   对象   定义类   整数   

原文地址:https://www.cnblogs.com/borter/p/9420358.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!