集合
dreamcasher
不忘初心,野蛮生长
展开
-
java Set相关总结
Set 无序存储,独一无二(值不能重复) HashSet 数组+链表的结构。HashSet存储值时不是按顺序来存,而是按照哈希值来存,取的时候同样是按照哈希值来取。HashSet也是不能存放相同的值,它是通过HashCode()和equals()来判断,如果HashSet中已存在相同的对象,则不存储(这与HashMap不一致,HashMap遇到对象相等则会覆盖,详细比较可以参考博文《 Has...原创 2018-08-09 10:55:44 · 117 阅读 · 0 评论 -
java Queue队列相关总结
Queue: 按照添加的顺序排列,FIFO(先进先出)。 通常队列使用两个方法:offer、poll。因为如果存放或者获取失败,返回false或者null(这种情况下不要往容器中添加null),而不是抛异常(异常很讨厌额^_^) 线程不安全的队列 LinkedList --implemets Deque 由于实现了双端队列的接口,所以“LinkedList ...原创 2018-08-09 16:40:22 · 249 阅读 · 0 评论 -
java List相关总结
List 有序存储,存储的元素可重复,元素可以为空。 ArrayList --extends AbstractList 底层为数组结构,所以查询快,增删慢 Vector --extends AbstractList 它是ArrayList的线程安全版本,只是在方法上增加Synchronied关键字 LinkedList --extends AbstractSe...原创 2018-08-10 10:09:19 · 122 阅读 · 0 评论 -
HashSet与HashMap比较——添加对象已存在处理方式一样?
答案是不一样的。 HashSet与HasMap在添加新对象是,会先判断容器中是否已存在相等的对象(比较key是否相等),如果存在,HashSet的处理方式是放弃存储新对象,然而HashMap的处理方式是覆盖之前的对象。 相等对象:如果两个引用指向同一个对象,那么这两个引用是相等的,他们的hashcode方法返回的值一致。如果没有重写Object中hashcode方法,返回的是对象在内存中的地址...原创 2018-08-06 14:22:51 · 509 阅读 · 0 评论 -
java Map相关总结
Map 无序存储,存储的元素不能重复,如果相等,直接覆盖。 HashMap 数组+链表+红黑树结构,非线程安全 HashMap存储值时不是按顺序来存,而是按照哈希值来存,取的时候同样是按照哈希值来取。HashMap也是不能存放相同的值,它是通过HashCode()和equals()来判断,如果HashMap中已存在相同的对象,则覆盖(这与HashSet不一致,HashSet遇到对象相等则不...原创 2018-08-10 17:21:20 · 154 阅读 · 0 评论 -
java Stack总结
Stack --extends Vector 底层为数组结构(因为Vector是ArrayList的线程安全版本),先进后出,线程安全的。 Stack中的几种操作 push 将元素压入栈 pop 将栈顶元素弹出来(获取并删除栈顶元素),如果栈为空,则抛出异常 peek 返回栈顶元素,如果栈为空,抛出异常 empty 判断栈是否为空 search...原创 2018-08-13 14:19:04 · 724 阅读 · 0 评论 -
List List<Object> List<?> 之间的区别
有这样一种观点:List 和 List<Object> 是一样的 其实不然。 从两个方面来分析,1、类型限制 2、赋值限定 List 没有类型限制,add 或者 get 的时候,接收或者返回的对象类型是Object,所以在add时任何类型的对象均可,get时返回值类型为Object。List也没有赋值限定,即任何只要是集合类的对象均可,包括有类型限定的集合。 List<O...原创 2019-02-22 16:45:12 · 2952 阅读 · 0 评论 -
HashMap实现原理
底层是一个数组+链表的结构,从jdk1.8开始,引入了红黑树,当链表的长度超过了阈值8,便会由链表转换为红黑树。 数组长度 数组的长度一定是,默认初始化长度为16,如果传入了初始化参数i,会将数组长度设置为比i大的最小。 数组扩容 什么时候扩容?当HashMap的容量超过阈值(threshold)便扩容,threshold=数组长度*loadFactory(默认为0.75)。举个例子,Ha...原创 2019-05-04 10:13:05 · 106 阅读 · 0 评论