Java学习之集合框架(下)

表的其他操作:判断表中的是否包含某元素重点内容
一、List查询表中是否包含某个元素:使用contains(element e),判断是否包含多个元素:containsAll (Collection< ?> c)。

1、存在返回true 反之返回false
2、实现原理是遍历表中元素,依次利用equals(object obj)比较【目标地址】,所以新建的同名对象会返回false
3、可以通过重写equels()方法,来通过比较【目标属性】来比对是否存在
二、Set表中查询也是用contains()和containsAll()
1、contains()的实现机制是通过调用每个元素的hashCode()返回hash码,再利用equals()判断两个哈希码是否相同,才能判别是否相同。
2、重写hashCode()和equals()方法,可以通过比较元素的属性进行比较。【通过系统的Generate hashCode() and equals()进行自动重写】
******************重写equals方法(固定模板)************************
@Override
public boolean equals(Object obj){
//如果obj与比较对象的位置相同,说明obj是从集合中取出再与该位置的元素比较,所以肯定相同
if(this==obj)
return true;
if(obj==null){//若字符串为空,则不能进行字符串比较,所以返回false
return false;
if(!(obj instanceof Course)){//若果obj当前类型不是Course,则当前两个对象肯定不相同
//instanceof 它的作用是判断其左边对象是否为其右边类的实例
return false;
//若上述均通过,则说明obj为Course对象,且当前对象不为空
Course course=(Course)obj;
if(this.name==null){
if(course.name==null)
return true;
else
return false;
}else{
if(this.name.equals(course.name))
return true;
else
return false;
}
}

java中的数据类型,可分为两类:
1. 基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
他们之间的比较,应用双等号(==),比较的是他们的值。
2. 复合数据类型(类)
当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
JAVA当中所有的类都是继承于Object这个基类的,
在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的【内存地 址】,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
(3)
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。

当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。

1.equals()方法的本意为确定两个对象的引用是否相同。

2.而JDK类中有一些类覆盖了oject类的equals()方法,比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:
java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)

关于使用 Set 集的 hashCode的方法,hashCode方法的工作原理是
Set.contains(E e)的时候,先调用从Object继承而来的hashCode方法,然后在调用equals()方法,连个方法都返回真的时候,才认定Set包含某个元素。jvm运行时,给每个对象分配唯一一个标志身份的标志hanshcode。众类鼻祖Object的hashCode()方法在默认情况下,判断哈希码是不是相同.即如同equals默认情况下比较的是二者是不是同一个内存快。Set集的contains方法,内部就是先调用hashCode再调用equals()方法。很多情况要结合实际对hashCode进行改写

表的其他操作:获取表中某个元素的索引位置
一、通过indexOf(Object o)获取索引位置。若没有返回-1
1、实现机制:表中每个元素遍历,通过equals()方法进行比较。(所以同样需要改写equals())
2、若表中存在多个相同属性元素,则返回首个元素的索引位置。
二、通过lastIndexOf(Object o)是返元素回最后一个索引位置。若没有返回-1

Map映射表
一、判断是否包含某个Key值:containsKey()
二、判断是否包含某个Value值:containsValue()
1、同样是以每一个元素的value值的equals方法进行比较,所以需要重写value类的equals()方法来进行属性(某个)比较,与之前的List的contains()一样

Collections:工具类,定义了很多静态方法,用来操作collections对象
Collection:接口
sort排序字符串按第一个位置从a~z顺序,然后第二位,
其他:1.数字:0-9
2.大写字母:A-Z
3.小写字母:a-z

public void testsort(){
list< Interger> inlist=new Arraylist< Interger>(); 泛型中不能有基本数据类型
Random ran=new Random();
for(int i=0;i<10;i++){
do{
Interger k=random.nextInt(100);
}while(inlist.contain(k)); 防止重复添加
list.add(k);
for(Integer integer:inlist){
system.out.println(interger)
}
排序:Collects.sort(inlist);

Collections.sort方法中可以比较的元素必须都实现Comparable接口
其中基本类型的包装类,和String类 都可以用Collections.sort方法比较
自定义类型的集合元素,需要实现Comparable接口,才能使用Collections.sort排序方法
compareable 是默认比较规则, comparator是临时比较规则
Comparable接口——可比较的
实现该接口表示:这个类的实例可以比较大小,可以进行自然排序
定义了默认的比较规则
其实现类需实现compareTo()方法
comparaTo()方法返回正数表示大,负数表示小,0表示相等
Comparator接口—–比较工具接口
用于定义临时比较规则,而不是默认比较规则
其实现类需要实现compare()方法
Comparator和Comparable都是Java集合框架的成员

compareable 需要实现compare to方法, comparator需要实现 compare方法
comparator:创建一个类引用comparator接口,并重写compare()方法
comparator的使用:Collections.sort(待排序序列,new Comparator对象名());
comparable:创建一个类引用comparable接口,并重写compareTo()方法
comparable的使用:Collections.sort(待排序序列);
Java集合框架:
Collection接口,Map接口,Collections工具类,Comparable接口,Comparator接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值