JAVA集合总结

  1. 集合中存储的都是引用。集合在java中就是一个容器,是一个对象,集合中任何时候都是‘引用’;
  2. 所有的集合类和集合接口都在 java.util.* 里面。
  3. 集合分单元素集合和双元素集合

单元素集合

超级父类接口是 Itreable 可迭代的,再往下是 Collection 接口,所有的单元素集合实现了 Iterable 接口都有 iterator()方法,获得迭代器对该集合进行迭代。
Collection 接口下面是 List 和 Set,都是单元素,List 里面元素有序可重复,有下标,下标从0开始,进去什么顺序出来就什么顺序。Set 里面无序不可重复,没下标。
在这里插入图片描述
List 的常用实现类有 ArratList, LinkedList, Vector, LinkedList 是双向链表实现。ArratList,Vector,底层都是数组,ArratList 是非线程安全的,Vector是线程安全的。Vector线程安全但效率较低,现在使用较少,有别的方法保证线程安全。

java双向队列 Deque的主要实现类就是 LinkedList,双向队列可以代替单向队列,Stack 使用。
在这里插入图片描述
Set 集合的实现类常用的有 HashSet 和 TreeSet ,Set和TreeSet中间还有一个SortedSet 接口,HashSet 底层是 HashMap, TreeSet 底层是 TreeMap。
在这里插入图片描述
注意: sortedSet 接口和其实现类 TreeSet 是可排序集合,放入其中的元素自动排序。HashSet不排序

双元素集合

Map集合和Set集合没有关系,Map的key和value存储的都是引用,
Map下面有HashMap,HashTable,TreeMap,HahMap 和 hashTable底层都是Hash表,HashTable是线程安全的,效率低已不怎么使用。Map下面有SortedMap接口,他有实现类 TreeMap,里面的元素的键是可以排序的。
在这里插入图片描述
java属性类 Properties 就是继承自HashTable,是线程安全的。键值对都必须是String。
SortedSet, SortedMap集合特定,无序不可重复但是可排序。无序指的是进出顺序不一致,且没有下标。

单元素集合总接口Collection常用方法

在这里插入图片描述
其中的 contains 的判断依据是比较集合类元素的equals方法返回的结果,具体得看元素有没有重写equals方法,要是没有重写则比较的是哈希地址,重写了则比较的是内容。

双元素集合MAP常用方法

keySet方法可以返回集合的 keyset, values就所有的值以Collection的形式返回。
在这里插入图片描述

HashMap 底层代码

hashmap底层是哈希表,哈希表是数组和链表的结合,结合了数组和链表的优点。Node结点数组,数组里的每个Node是个链表,Node结点有个属性是哈希值,是key的hashcode()方法的执行结果,哈希值通过哈希算法可以获得数组下标。
在这里插入图片描述
map.put(k,v)方法执行的过程,先会将key value封装到 node 里,算出key的哈希值即数组下标,按照链表往里插,已经有的元素则覆盖,没有则插到链表底部。
在这里插入图片描述
map.gut(k)方法执行的过程,先获得key的哈希值,通过哈希算法转换成数组下标,在该下标的链表上和每个key进行equals比较,知道true时返回,否则返回null。

hashmap重点:

hashcode方法 和 equals 方法都得重写。和HashSet 一样。
同一个链表上的node结点的哈希值一样,因为他们的数组下标一样。但key不一样,因为不可重复,否则覆盖。
在这里插入图片描述
还要注意散列分布均匀,初始化容量要是2的倍数,更容易达到散列均匀。
在这里插入图片描述
终极结论:放在hashMap的key部分,和放在hashSet中的元素,需要重写hashcode方法和equals方法。用IDEA直接生成就行啦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值