JAVA学习笔记之Object知识和Set集合和Map比较_第1页
JAVA学习笔记之Object知识和Set集合和Map比较_第2页
JAVA学习笔记之Object知识和Set集合和Map比较_第3页
JAVA学习笔记之Object知识和Set集合和Map比较_第4页
JAVA学习笔记之Object知识和Set集合和Map比较_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JAVA学习笔记之Object知识和Set集合和Map比较一.Object类的三个方法1.toString()对象的自我描述、自我介绍目的简化getter输出public String toString()return 对象的实例变量;Student.java不重写toString() 时 默认打印格式如下类全名hashCodeSystem.out.println(s);相当于System.out.println(s.toString();2.equals()复习=和equals:String的两种创建方式 以及比较public boolean equals(Object o)/1.类型相同

2、instanceof 或反射判断/2.定义自己的规则重写equals一定要重写hashCode()3.hashCode 用于加速查找 实质索引public int hashCode()return ;hashCode的两个基本原则1.两个对象equals方法比较返回true,那么它俩的hashCode方法也要保证是相同2.对象中用作equals比较标准的属性,都应该用来计算hashCode 每种类型的hashCode计算方式参见 疯狂java P250二.一个原理 Hash算法文件夹里找音乐的例子查找算法、存储算法歌名 按歌手分 苏打绿 苏打绿命名的文件夹键 hash算法 hashCode 哈

3、希马桶对象存储在存储时,为了加速查询,存储的时候就要按照对象的HashCode,存到对应的哈希马桶中(文件夹)对象查找用hash算法找对象,分两步1.通过对象的hashCode找到所对应的哈希马桶(类似过歌手名找到文件夹)2.通过equals在桶里找对象比较好的hash算法会保证尽量让一个哈希马桶里只有一个对象。equals相等hashCode一定相等 (hashCode是文件夹 equals是歌)hashCode相等equals不一定相等*正式进入集合*重点: 一个图 两个比较接口 三个迭代方法一个图集合设计思想根据ordered(有迭代顺序)、sorted(有排序顺序)设计Collecti

4、on接口Set接口 List接口 Queue接口排序工具 单独的接口 MapObjectArraysCollectionsList 接口Vector ArrayList LinkedListArrayList 最常用 线性表的顺序存储方式 查找对象比较快,插入删除对象时比较慢。1.动态数组(长度可变的数组) 101522332.引用类型数组 里面的元素都是引用类型3.有迭代顺序 迭代顺序为数组下标顺序ArrayList 增删改查Vector(线程安全的ArrayList)LinkedList(链式数组) 线性表的链式存储方式 迭代顺序为链表的插入顺序 ,链表插入删除方便,查找慢顺带讲解泛型1.

5、规范添加到集合的对象的类型,只能为一种2.泛型是编译时检查演示代码:public class TestFanXing public static void main(String args) List list = new ArrayList();Object obj = new Integer(1);list.add(String)obj);Set集合HashSet SortedSet(接口)LinkedHashSet NavigableSet(接口)TreeSetHashSet1.去重 案例:比如呼叫中心,对打入电话的客户去重,如果有100个用户,每个用户打了10遍,按电话号码去重,否则在

6、回拨的时候就会打一百遍电话。面试题:对HashSet集合去重的标准:hashCode() 和equals() 必须都相同,才是意义上相同的对象,就不能将象添加到集合中去,并把相同的对象去掉。只要hashCode()和equals()有一个不相同,那么他两不是相同的对象,就能添加进去。2.无迭代顺序:所谓的迭代顺序就是输出顺序和添加顺序是不是一致。额外知识(可以不管):实质输出顺序是根据一定算法求出来的 该算法和hashCode有些关系(可阅读源码并结合打断点查看)LinkedHashSet有迭代顺序的HashSet 迭代顺序是链表中 元素的添加顺序面试题:HashSet 和LinkedHash

7、Set如何选用?不要求输出顺序和插入顺序一致时,使用HashSet要求输出顺序和插入顺序一致时,使用LinkedHashSet性能考虑频繁插入数据时,用HashSet 因为LinkedHashSet要维护指针域 所以它比HashSet稍慢主要为了迭代时 使用LinkedHashSet 比较快 因为有指针 遍历完第一个明确知道下一个元素的地址。TreeSet1.有排序顺序的set,放入该set的对象必须实现Comparable接口的compareTo方法来定义排序规则。2.在没有重写对象的equals()方法使用compareTo去重,compareTo 为0 表示重复的对象,会去掉,并不会吧对

8、象添加到集合中去。3.重写放入TreeSet的对象的equals()方法时,要保证equals为true时,compareTo为0,才能认为他们是同一个对象。Map接口Hashtable HashMap SortedMap(接口)LinkedHashMap NavigableMap(接口)TreeMap一一对应 键值对 映射关系(实质是关联数组)HashMap 详解1.通过hashCode、equals方法来判断两个键是否相同,可以举科目和成绩的例子2.相同的key key不变 value覆盖3.没有排序顺序也没有迭代顺序的Map,允许有一个key键为null和多个value值为nullLin

9、kedHashMap(有迭代顺序的HashMap)Hashtable 线程安全版本的HashMap(区别1),Hashtable不允许有任何为null的内容(区别2)TreeMap(有排序顺序的Map)也是使用compareTo 来确定同一个key,判断是否为相同的对象和上面TreeSet的集合相同。*Collections和Arrays工具类Collections、Arrays工具类 用于对集合和数组的排序Collections.sort(list,排序规则对象);/只能排序List 不能排序SetArrays.sort(arr,排序规则对象);/排序数组*两个比较接口*Comparable

10、TreeSet、TreeMap 中的对象的类必须实现Comparable接口的compareTo()方法public class A implements Comparablepublic int compareTo(A a)/自定义排序规则/如何实现:一般调用底层属性的compareTo方法 例如DVD的id的compareToreturn 数字;/整数,表示大,0表示相等、负数表示小演示代码:参见DVDComparator排序规则接口 更加灵活 独立于DVD 最后使用collections.sort();调用/排序规则public class SortedDVDByPrice implem

11、ents Comparatorpublic int compare(Object o1, Object o2) DVD dvd1 = (DVD)o1;DVD dvd2 = (DVD)o2;Integer dvd1Price = dvd1.getPrice();Integer dvd2Price = dvd2.getPrice();return dvd1PpareTo(dvd2Price);public int compareTo(A a)/自定义排序规则/如何实现:一般调用底层属性的compareTo方法 例如DVD的id的compareToreturn 数字;/整数,表示大,0表示相等、负数

12、表示小public class TestComparator public static void main(String args) List list = new ArrayList();/Set list = new HashSet();/实现按价格排序DVD dvd1 = new DVD(3,”逆世界”,30);DVD dvd2 = new DVD(1,”北京爱上西雅图”,20);DVD dvd3 = new DVD(2,”叶问终极一战”,10);DVD dvd4 = new DVD(4,”北京爱上西雅图”,20);list.add(dvd1);list.add(dvd2);list.add(dvd3);list.add(dvd4);/另一个排序工具 Collections 工具类 提供排序功能/没排序之前for(DVD dvd:list)System.out.println(dvd);SortedDVDByPrice sortedDVDByPrice = new SortedDVDByPrice();Collections.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论