请问java中如何循环取出集合元素,并判断其中的值与某个值相等

请问java中如何循环取出集合元素,并判断其中的值与某个值相等,第1张

for (javautilIterator it= listiterator(); ithasNext();){

formbean fb=(formbean)itnext(); //把formbean 改成你实际的类名

if( fbnameequals("aa")){ //判断是否相等

}

}

既然是object那么就循环list里面的对象,再循环里面取出object的一个属性,对这个属性(比如你说的:1140,1144,1123,1141)进行判断,符合的就把这个对象输出,并停止循环 ,具体代码就要你自己编了

通过remove和add方法,set集合中的对象属性为private final

Set接口

集合里的多个对象没有明显顺序。Set集合和Collection基本一样,没有

提供额外方法,只是和Collection行为不同

Set集合不允许包含相同的元素,如果add的是两个相同元素会返回false

Set不实用==运算符,根据equals方法

HashSet类

HashSet类是Set接口的典型实现,大多数时候使用Set集合都是用这个类实现

HashSet按Hash算法来存储集合中的元素

HashSet特点:

1不能保证元素的排列顺序,顺序可能变化

2HashSet不是同步的,多个线程同时访问一个Set集合,必须用代码

保证同步

3集合元素值可以是null

当向HashSet集合中存入一个元素,HashSet会调用该对象的HashCode()

得到对象的hashCode,根据HashCode来决定对象在HashSet中的位置

如果两个元素equal方法比较返回true但是hashCode()方法返回值不同,

HashSet会把两个元素存储在不同位置

HashSet判断两个元素相同需要equal和hashCode都相同

因此重写类的equals方法和hashCode()方法要保证两个对象通过equals

返回true时hashCode也相等

Hash算法保证通过一个对象快速找到另一个对象。可以很快的执行,当需要

查找集合中的某个元素时,hash算法可以直接根据该元素的值找到该元素

从而让程序快速找到元素。

在数组中通过数组元素索引寻找元素,HashSet通过hashcode索引

重写hashCode()方法的基本步骤

当两个对象通过equals方法返回true时,两个对象的hashCode相等

对象中用作equals比较标准的属性,应该用来计算hashCode

向HashSet中添加可变对象时,如果修改HashSet集合中对象,有可能导致

该对象与集合中其他对象相等,从而导致HashSet无法正确访问对象

HashSet有一个子类 LinkedHashSet,LinkedHashSet集合也是根据HashCode来决定

元素的存储位置,同时使用链表维护元素次序,这样是的元素看起来是以

插入顺序保存,便利集合时会按插入顺序来访问。

Linked需要维护元素的插入顺序,性能略低于HashSet,但在迭代时性能更好

TreeSet是SortedSet接口的唯一实现

TreeSet可以确保元素处于排序状态。提供了几个额外方法:

1Comparator

comparator():返回当前Set使用的Comparator,或者null,表示

自然的方式排序

2Object first():返回集合中的第一个元素

3Object last():返回集合中最后一个元素

4Object lower(Object

e):返回集合中位于指定元素之前的元素

5Object higher(Object

e):返回集合中位于制定元素之后的元素

6SortedSet

subSet(fromElement,toElement):返回set的子集,范围从from到to

7SortedSet headSet(toElement)返回set子集,小于toElement

8SortedSet

tailSet(fromElement)返回set子集,由大于等于fromElement元素组成

TreeSet是根据元素值来进行排序而不是根据插入顺序

TreeSet采用红黑树的数据结构对元素排序 :支持自然排序(默认)和定制排序

自然排序:

TreeSet会调用集合元素的compareTo方法来比较元素之间的大小关系,

然后将集合元素按升序排列。

Java提供了一个Comparable接口,该接口定义了一个compareTo(Object obj)方法

该方法返回一个整数值,实现该接口的类必须实现该方法,实现了该接口的类的对象

可以比较大小。obj1compareTo(obj2),如果方法返回0,表明两个对象相等。如果

返回正整数,表明obj1大于obj2;如果返回负整数,表明obj1小于obj2

如果要将对象添加如TreeSet该对象必须实现Comparable接口

当想TreeSet中添加对象时,会先将要添加的对象与TreeSet中的对象用compareTo比较

如果找不到compareTo则引发ClassCastException异常

因为只有同一个类型才能比较大小 所以TreeSet中添加的应该是同一个类型的对象

TreeSet和HashSet集合中的对象如果是可变对象,对象属性改变时,会导致集合处理

对象复杂化,易出错。所以应该尽量在集合中添加不可变对象

不可变对象是

1属性为private final

2含有带参数构造器,为对象初始化

3属性有get方法没有set方法

定制排序:

TreeSet的自然排序是根据集合元素大小,TreeSet将它们以升序排列。使用定制

排序,如降序,使用Comparator接口的帮助。接口中包含一个int compare(T o1,T o2)

用于比较o1和o2的大小:重写该方法可以改变排序规则

答:

集合A,|x-a|=4,则x-a=4或者x-a=-4;x=a+4或者x=a-4

集合B={1,2,b},元素具有互异性,则b≠1并且b≠2

1)

对于任意实数b都有A包含于B,

则A中的元素不能与b相等。

所以:

x=a+4=1

x=a-4=2

无解

或者:

x=a+4=2

x=a-4=1

无解

所以:不存在满足题意的a值

或者说,集合A中的元素差值=(a+4)-(a-4)=8

而集合B中的元素差值=2-1=1

所以:不存在满足题意的a

2)

从1)知道,集合A中的元素必定有一个与b相等

所以:

a+4=1

a-4=b

或者:

a+4=2

a-4=b

或者:

a-4=1

a+4=b

或者:

a-4=2

a+4=b

解以上4个方程组得:

a=-3,b=-7

a=-2,b=-6

a=5,b=9

a=6,b=10

综上所述,元素对(a,b)为:

(-3,-7)、(-2,-6)、(5,9)、(6,10)

你可以获取ArrayList存储这组数据 然后以集合的长度作为随机数的上限,用Random对象的nextInt方法随机取ArrayList对象元素的索引值,利用ArrayList对象的get方法通过索引值获取你需要的数,这样就达到了随机取数的目的

Set是不能重复的集合,所以可以用Set去重;

String、int、double类型示例,如下:

String类型:

int类型:

double类型:

可以看到, Set集合可直接对String、int、double类型去重

Map、List、bool类型和String、int、double类型对比示例,如下:

可以看到,当自定义对象实例化为同一个对象时,Set会过滤掉同一个实例化的对象;当自定义对象实例化为不同对象时,Set不会去重,即使对象数据内容一样,这不符合我们的业务;

可以看到,重写自定义对象==方法,Set还是不能去重;

上面重写自定义对象hashCode和==方法,以title不同区分不同对象;

可以看到,重写自定义对象hashCode和==方法,Set集合对自定义对象去重才有效;并且Set集合里有相同对象时(相同对象为上面自定义对象title值相同的对象),后面相同的对象就不会被加入Set集合里了( 如上面title一样,boolValue不一样,这样被认为相同的对象,因为重写自定义对象hashCode和==方法,以title不同区分不同对象;Set集合里最开始加入的TestModel('a', boolValue: false),数据不会被相同对象TestModel('a', boolValue: true)覆盖 )。

网上介绍flutter Set集合时一般会介绍Set没有顺序,这点不太理解,可能是不能通过索引来获取对应的值吧,像Java语言的Set集合确实是无序的,但flutter的Set集合保持着子元素的有序性。 如下:

可以看到,将Set通过toList()方法转为List后,List里子元素的顺序和子元素插入Set集合的顺序是一致;对于自定义对象亦是如此,可自行验证。

为什么Set集合会保持子元素插入顺序呢

我们看下Set源码,如下:

从源码我们可知,Set()是一个工厂构造方法,根据工厂构造方法的特点,Set是由LinkedHashSet实例化的。

从上面注释可知,HashSet是无序的,LinkedHashSet保持着子元素插入的顺序。而Set是由LinkedHashSet实例化的,所以Set保持着子元素插入的顺序。

如想要深入分析LinkedHashSet,LinkedHashSet源码中有很多external声明的方法,可参考 如何找到flutter external声明方法的实现

demo传送门

HashSet 比较两个对象是否相同的机制是 1hash 2 == 3equals()

第一步就是比较两个对象的hash值是否相同(注意这里的hash值是经过处理的,为了使散列更均匀)

hash值相同的就会散列到一组 不相同就会散列到不同的组(此时就不会再继续比较了,因为在不同组hashset认为他们就是不同的对象)

第二步 如果hash值相同 则进行连等判断 即比较内存地址是否相同 如果不相同那么hashset就认为他们肯定不是相同的对象 如果内存地址相等(这一步最主要的目的其实就是删除元素的时候判断)那么进行第三步

第三步 如果equals返回相同 那么他们就是彻彻底底的相同的对象 不能添加到set里,如果返回不同那么他们就不是彻底的不相同 就可以添加到一个set里

楼主明白了吧,纯手打,希望对你有帮助

以上就是关于请问java中如何循环取出集合元素,并判断其中的值与某个值相等全部的内容,包括:请问java中如何循环取出集合元素,并判断其中的值与某个值相等、java,集合里面数组对象取值问题,各位大神帮帮忙,谢谢、java 怎么给set赋值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9561486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存