集合对象是内存中的一个容器对象,用来方便的存贮批量的数据,集合中的数据在没有持久化,程序运行结束后,数据将消失。在java语言中,设计的集合主要为3大类
Set集合:实现Set接口的集合类称为Set集合;
List集合:实现List接口的集合类称为List集合;
Map集合:实现Map接口的集合类称为Map集合
java对集合设计的相关接口与类放在:java.util包中,在我们使用集合时,需要导入对应的集合类或者接口
集合中只能放引用类型数据,不能放基本数据类型,如果要放,请使用基本数据类型的包装类型
Collection是Set、List、Queue三个集合共同的接口2、Set集合
Set集合特性:不包含重复元素,通过调用元素的equals方法实现判断两个元素是不是同一个元素publicinterfaceSet<E>extendsCollection<E>
Set接口的实现类:HashSet、TreeSet
基于hash算法决定元素在集合中的存放位置,HashSet存取效率非常高
熟练Set集合的基本操作API:添加、删除、获取元素、集合大小,清空集合等获取集合元素:
Set接口的实现类:HashSet、TreeSet
基于hash算法决定元素在集合中的存放位置,HashSet存取效率非常高
熟练Set集合的基本操作API:添加、删除、获取元素、集合大小,清空集合等
Setset=newHashSet();set.add(1);set.add(2);set.add(3);Object[]arr=set.toArray();for(inti=0;i<arr.length;i++){??System.out.println(arr[i]);}
//迭代器:IterableIterator<T>iterator();//实现Iterable接口的方法,就能得到的一个迭代器对象

//通过迭代器获取Set集合元素Setset=newHashSet();set.add(1);//....Iteratorit=set.iterator();while(it.hasNext()){??System.out.println(it.next());}
对Set集合,如果放到集合里的是一个对象,且当对象的某个属性一致时,判断为同一个属性,如何操作?
Set集合默认是调用对象的equals方法比较,此时,已不能满足我们的业务需要
解决方法:根据新的业务重写equals方法,此时还要重写hashcode方法
下面的例子是当tel相同时视为同一个对象:
@Override??publicinthashCode(){//这里重写了hashCode方法,将tel作为hashCode的值returnInteger.parseInt(tel);??}
@Override??publicbooleanequals(Objecto){if(this==o){??returntrue;}if(o==null||getClass()!=o.getClass()){??returnfalse;}Useruser=(User)o;//根据Tel是否相同判断是否为同一个人if(tel.equals(user.getTel())){??returntrue;}returnObjects.equals(id,user.id);??}}
publicstaticvoidmain(String[]args){??Setset=newHashSet();
Useru1=newUser();??u1.setId(1);??u1.setName("张三");??u1.setTel("183");
Useru2=newUser();??u2.setId(2);??u2.setName("李四");??u2.setTel("183");
set.add(u1);??set.add(u2);
//可以看到,只输出了1,证明只有1个对象存进去了??System.out.println(set.size());
Iteratorit=set.iterator();??while(it.hasNext()){System.out.println(it.next());??}
Set接口的第2个实现类,TreeSet相对于HashSet,多了一个排序的功能
排序方法:使用元素的自然顺序对元素进行排序
元素的自然顺序:此元素实现Comparable接口,当将元素放到TreeSet集合中,TreeSet集合就根据Comparable接口定义的比较规则来比较元素//返回值为整型:为0表示两个元素相等,大于0表示大于,小于0表示小于publicinterfaceComparable{?intcompareTo(To)?}
如果放到TreeSet集合中的元素没有实现自然排序,则意味会出异常。在JDK中,8种基本数据类型的包装类型和字符串都实现了此接口
如果在集合中放其它类型的元素,必须手动实现Comparable接口,并实现接口中定义的compareTo方法
@DatapublicclassUserimplementsComparable<User>{
@Override??publicintcompareTo(Usero){//根据id排序intcompare=Integer.compare(this.id,o.getId());if(compare==0){??//若id相同,则根据名字排序??returnthis.name.compareTo(o.getName());}returncompare;??}}
本文来源:国外服务器--通过调用元素的equals方法实现判断两个元素是不是同一个元素public
本文地址:https://www.idcbaba.com/guowai/6335.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。




