集合复习笔记(下)

十,泛型初步

(一)如果底层有<E>就说明是泛型指定的数据类型,不需要强制数据类型转换

(二)使用泛型的好处

  1. 集合中存储的元素统一了

  2. 从集合中取出的元素类型是泛型执行的类型,不需要强制数据类型转换

  3. 迭代器也需要使用泛型

(三)泛型的缺点

导致集合中存储的数据缺乏多样性

(四)自定义泛型

  1. 自己定义类的时候页可以使用泛型

     

十一,HashSet与HashMap(非线程安全)

(一)哈希表底层的数据结构

  1. HashSet底层是一个哈希表也叫散列表

  2. 是数组和单向链表的结合体

    • 数组:查询效率好,增删效率低

    • 单向链表:增删效率低,查询效率高

  3. 哈希表“存储单向链表的以为数组

  4. put方法的原理

    • 将key与value封装到node对象中

    • 底层调用hashcode方法(返回内存地址)得到hash值

    • 在返回null的时候不需要equals

  5. get方法的实现原理

    • 先用key的hashcode()方法得出哈希值,通过哈希算法转换为数组下标,通过数组下标,快速定位到某个位置上

    • 如果位置上什么也没有则返回null,如果位置上有单向链表,那么拿着参数key和单向链表上的每一个节点中的key进行equals,如果都是false返回null,反之,将这个节点的value返回

    • 在返回null的时候不需要进行equals

  6. 为什么哈希表的增删查找效率都高

    • 增删是在链表上完成的

    • 查询也只需要扫描部分

  7. 为什么放在HashMap集合中的key部分的元素都要重写equals方法

    • 因为默认比表的存储地址

  8. HashMap结合的特点

    • 无序不可重复

    • HashMap中的key部分是放在了HashSet里面,因此也要重写HashMap中的equals方法

    • 也可以存null,并且通过get方法得到null对应的value

    • HashTable(线程安全的,初始容量是11,扩容是*2+1,扩容因子是0.75)的k与v不能为null

  9. 重点

    • 放在HashMap中的key部分的严肃与HashSet中的元素需要重写hashCode与equals

    • 如果一个类的equals方法重写了,必须重写hashCode,如果equals返回的true,则hashCode返回一定相同

  10. HashMap集合的初始容量必须是二的倍数,这样介意提高存取效率

    • 在jdk8之后如果哈希表的单向链表中元素大于八,单向链表的数据结构会变成红黑树的数据结构,当红黑树的元素小于6以后又会变回单链表

(二)特点

  1. 无序不可重复

  2. 放到Hashet的元素实际上是放到HashMap的key上

  3. TreeSet按照从小到大的顺序自动排序

(三)Map接口的常用方法

  1. Clear清除

  1. Containskey是否包含某种key

  1. Containsvalue是否包含某种value

  1. Get获取通过key获得value

  1. 支持泛型

  1. Put存放键值对

  1. Keyset获取集合中所有的key

  1. Remove删除键值对

  1. Size大小

  1. Values获取所有的value,返回一个colltion

  1. IsEmpty

  1. Set<map,entry<k,v>> entryset() 将map集合转换为set集合

(四)Map集合遍历

  • 方法一

  • 方法二(效率更高)

     

十二,TreeSet

(一)基本

1.底层是TreeMap集合

2.TreeMap底层是二叉树

3.TreeSet集合中的元素等同于TreeMap集合的key部分

4.TreeSet中的元素可以按照元素大小顺序自动排序。称为可排序集合。

(二)排序方法一

1.对于自定义的类型要指定排序规则

2.C.NewClass3_15.Person cannot be cast to java.lang.Comparable

3.出现这个异常的原因是自定义类没有实现*comparable*接口。

4.要解决这个异常要让自定义类继承*comparable*接口

5.然后重写comparaTo

6.比较规则写法:(二叉树)

(1)返回0表示,value会覆盖

(2)返回小于0表示 会继续在左子树上面找

(3)返回大于0表示会继续在右子树上面找

(4)在写compareto的时候不要忘记像是String这些数据函数自带compareto方法。

7.自平衡二叉树

(1)遵循左小右大的存放原则

(2)遍历二叉树的三种方法(前中后是说的根的位置)

①前序遍历:根左右

②后续遍历:左右根

③中序遍历:左根有

(3)Treeset与treemap采用的是中序遍历的方法

(三)排序方法二 

1.创建比较器 *Comparator(注意与排序方法一区分)*

2.使用比较器

(四)如果比较规则不经常改变用第一种,如果比较规则经常改变使用第二种方法。第二种符合oct原则,可以切换改变。

十三、集合工具类

(一)Collection与collections

  1. Collection是集合接口

  1. Collections是集合工具类

(1)Collections.synchronizedList(集合) 将不是线程安全的集合变成线程安全的

(2)Collections.sort(list,比较器); 将集合排序(也需要实现comparalbe接口)

(3)可以将set集合转换为list集合在通过上面的方法进行排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值