JAVA学习笔记之Object知识和Set集合和Map比较.docx

上传人:b****6 文档编号:4776853 上传时间:2022-12-08 格式:DOCX 页数:7 大小:17.89KB
下载 相关 举报
JAVA学习笔记之Object知识和Set集合和Map比较.docx_第1页
第1页 / 共7页
JAVA学习笔记之Object知识和Set集合和Map比较.docx_第2页
第2页 / 共7页
JAVA学习笔记之Object知识和Set集合和Map比较.docx_第3页
第3页 / 共7页
JAVA学习笔记之Object知识和Set集合和Map比较.docx_第4页
第4页 / 共7页
JAVA学习笔记之Object知识和Set集合和Map比较.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

JAVA学习笔记之Object知识和Set集合和Map比较.docx

《JAVA学习笔记之Object知识和Set集合和Map比较.docx》由会员分享,可在线阅读,更多相关《JAVA学习笔记之Object知识和Set集合和Map比较.docx(7页珍藏版)》请在冰豆网上搜索。

JAVA学习笔记之Object知识和Set集合和Map比较.docx

JAVA学习笔记之Object知识和Set集合和Map比较

JAVA学习笔记之Object知识和Set集合和Map比较

一.Object类的三个方法

1.toString()对象的自我描述、自我介绍

目的简化getter输出

publicStringtoString(){

return对象的实例变量;

}

Student.java

不重写toString()时默认打印格式如下

类全名@hashCode

System.out.println(s);

相当于

System.out.println(s.toString());

2.equals()

复习==和equals:

String的两种创建方式以及比较

publicbooleanequals(Objecto){

//1.类型相同instanceof或反射判断

//2.定义自己的规则

}

重写equals一定要重写hashCode()

3.hashCode用于加速查找实质索引

publicinthashCode(){

return;

}

hashCode的两个基本原则

1.两个对象equals方法比较返回true,那么它俩的hashCode方法也要保证是相同

2.对象中用作equals比较标准的属性,都应该用来计算hashCode每种类型的hashCode计算方式参见疯狂javaP250

二.一个原理Hash算法 文件夹里找音乐的例子

查找算法、存储算法

歌名按歌手分苏打绿苏打绿命名的文件夹

键hash算法hashCode哈希马桶

对象存储

在存储时,为了加速查询,存储的时候就要按照对象的HashCode,存到对应的哈希马桶中(文件夹)

对象查找

用hash算法找对象,分两步

1.通过对象的hashCode找到所对应的哈希马桶(类似���过歌手名找到文件夹)

2.通过equals在桶里找对象

比较好的hash算法会保证尽量让一个哈希马桶里只有一个对象。

equals相等hashCode一定相等(hashCode是文件夹equals是歌)

hashCode相等equals不一定相等

*********************正式进入集合****************************

重点:

一个图两个比较接口三个迭代方法

一个图

集合设计思想

根据ordered(有迭代顺序)、sorted(有排序顺序)设计

Collection接口

Set接口List接口Queue接口

排序工具单独的接口Map

Object

–Arrays

–Collections

List接口

VectorArrayListLinkedList

–ArrayList最常用线性表的顺序存储方式查找对象比较快,插入删除对象时比较慢。

1.动态数组(长度可变的数组)10—–>15—>22—>33

2.引用类型数组里面的元素都是引用类型

3.有迭代顺序迭代顺序为数组下标顺序

ArrayList增删改查

–Vector(线程安全的ArrayList)

–LinkedList(链式数组)线性表的链式存储方式迭代顺序为链表的插入顺序,链表插入删除方便,查找慢

顺带讲解泛型

1.规范添加到集合的对象的类型,只能为一种

2.泛型是编译时检查

演示代码:

publicclassTestFanXing{

publicstaticvoidmain(String[]args){

Listlist=newArrayList();

Objectobj=newInteger

(1);

list.add((String)obj);

}

}

Set集合

HashSetSortedSet(接口)

LinkedHashSetNavigableSet(接口)

TreeSet

–HashSet

1.去重案例:

比如呼叫中心,对打入电话的客户去重,如果有100个用户,每个用户打了10遍,按电话号码去重,否则在回拨的时候就会打一百遍电话。

面试题:

对HashSet集合去重的标准:

hashCode()和equals()必须都相同,才是意义上相同的对象,就不能将象添加到集合中去,并把相同的对象去掉。

只要hashCode()和equals()有一个不相同,那么他两不是相同的对象,就能添加进去。

2.无迭代顺序:

所谓的迭代顺序就是输出顺序和添加顺序是不是一致。

额外知识(可以不管):

实质输出顺序是根据一定算法求出来的该算法和hashCode有些关系(可阅读源码并结合打断点查看)

–LinkedHashSet

有迭代顺序的HashSet迭代顺序是链表中元素的添加顺序

面试题:

HashSet和LinkedHashSet如何选用?

不要求输出顺序和插入顺序一致时,使用HashSet

要求输出顺序和插入顺序一致时,使用LinkedHashSet

性能考虑

频繁插入数据时,用HashSet因为LinkedHashSet要维护指针域所以它比HashSet稍慢

主要为了迭代时使用LinkedHashSet比较快因为有指针遍历完第一个明确知道下一个元素的地址。

–TreeSet

1.有排序顺序的set,放入该set的对象必须实现Comparable接口的compareTo方法来定义排序规则。

2.在没有重写对象的equals()方法使用compareTo去重,compareTo为0表示重复的对象,会去掉,并不会吧对象添加到集合中去。

3.重写放入TreeSet的对象的equals()方法时,要保证equals为true时,compareTo为0,才能认为他们是同一个对象。

Map接口

HashtableHashMapSortedMap(接口)

LinkedHashMapNavigableMap(接口)

TreeMap

一一对应键值对映射关系(实质是关联数组)

–HashMap详解

1.通过hashCode、equals方法来判断两个键是否相同,可以举科目和成绩的例子

2.相同的keykey不变value覆盖

3.没有排序顺序也没有迭代顺序的Map,允许有一个key键为null和多个value值为null

–LinkedHashMap(有迭代顺序的HashMap)

–Hashtable线程安全版本的HashMap(区别1),Hashtable不允许有任何为null的内容(区别2)

TreeMap(有排序顺序的Map)

也是使用compareTo来确定同一个key,判断是否为相同的对象和上面TreeSet的集合相同。

*******************************************************************************

Collections和Arrays工具类

Collections、Arrays工具类用于对集合和数组的排序

Collections.sort(list,排序规则对象);//只能排序List不能排序Set

Arrays.sort(arr,排序规则对象);//排序数组

******************************两个比较接口************************************

–Comparable

TreeSet、TreeMap中的对象的类必须实现Comparable接口的compareTo()方法

publicclassAimplementsComparable{

publicintcompareTo(Aa){

//自定义排序规则

//如何实现:

一般调用底层属性的compareTo方法例如DVD的id的compareTo

return数字;//整数,表示大,0表示相等、负数表示小

}

}

演示代码:

参见DVD

–Comparator 排序规则接口更加灵活独立于DVD最后使用collections.sort();调用

//排序规则

publicclassSortedDVDByPriceimplementsComparator{

publicintcompare(Objecto1,Objecto2){

DVDdvd1=(DVD)o1;

DVDdvd2=(DVD)o2;

Integerdvd1Price=dvd1.getPrice();

Integerdvd2Price=dvd2.getPrice();

returndvd1PpareTo(dvd2Price);

}

}

publicintcompareTo(Aa){

//自定义排序规则

//如何实现:

一般调用底层属性的compareTo方法例如DVD的id的compareTo

return数字;//整数,表示大,0表示相等、负数表示小

}

publicclassTestComparator{

publicstaticvoidmain(String[]args){

Listlist=newArrayList();

//Setlist=newHashSet();

//实现按价格排序

DVDdvd1=newDVD(3,”逆世界”,30);

DVDdvd2=newDVD(1,”北京爱上西雅图”,20);

DVDdvd3=newDVD(2,”叶问终极一战”,10);

DVDdvd4=newDVD(4,”北京爱上西雅图”,20);

list.add(dvd1);

list.add(dvd2);

list.add(dvd3);

list.add(dvd4);

//另一个排序工具Collections工具类提供排序功能

//没排序之前

for(DVDdvd:

list){

System.out.println(dvd);

}

SortedDVDByPricesortedDVDByPrice=newSortedDVDByPrice();

Collections.sort(list,sortedDVDByPrice);

//排序之后

System.out.println(“排序之后”);

for(DVDdvd:

list){

System.out.println(dvd);

}

}

}

遍历Collection三种方式

1.Iterator接口

2.foreach

3.List可以通过size()遍历

小技巧:

直接输出集合引用名也可以查看元素因为集合类重写了toString()方法

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1