集合
Java基础
ArrayList
- 线程不安全
- 底层是数组 实现的, 无参定长10,空间不够1.5倍扩容,指定一个int值,以这个值为基础扩容
Vector
- 线程安全 sycnchroniszed
- 底层也是数组
- 扩容不指定默认2倍
LinkList
- 线程不安全
- 底层是双向链表和双端队列
HashSet
- 不错存放重复的元素 实现了接口Set都一个样
- 接口对象存放数据是无序的
- 底层是链表+数组+红黑树
1 | import java.util.HashSet; |
主要理解下底层结构,n个链表,链表头用数组存储,数组每个元素都是一个链表的表头
每次添加元素先计算HashCode() 看看属于哪一个链表,然后在相应的表头中按尾插法插入链表,如果存在相同的HashCode会使用equals方法 比较其元素是否相等,相等则不加入!!
因此如果这个规则是可以自己重写的,按照自己的想法是否判断他们相等-》重写HashCode 和equals方法即可
泛型编程
- 参数化类型 JDK5.0出现的新特性
多线程
- 一个普通程序和并发程序区别
Process 与 Thread
- Process 进程,是一个程序执行的过程(静态概念),是系统资源分配的单位
- 一个进程中可以包含若干个线程,一个进程至少有一个线程,线程是cpu调度和执行的单位。
- 线程是独立执行的路径
- 运行一个简单程序,即使自己没有创建线程,后台也会有主线程,gc线程(垃圾回收线程,守护线程)
- main()称为主线程
- 同一份资源操作时,会存在资源抢夺问题,需要加入并发控制
- 线程调度是cpu,不能人为干预先后,线程会带来额外的开销
- 每个线程在自己的工资内存中交换,内存控制不当会造成数据不一致
Thread Runnable Callable
- Thread类
继承Thread
1 | public class Demo11 extends Thread{ |
交替执行这个输入语句,先后顺序看无法决定
- 实现Runnable接口
这是一个接口!Thread是实现的这个接口 。
1 | public class Demo12 { |
- 线程不安全
1 | public class Demo13 { |
同一份资源反复被多个人获取
- 一个龟兔赛跑简单的多线程
1 | public class Demo14 {//龟兔赛跑 |
- Callabe 接口 实现简单多线程
1 | import javax.xml.namespace.QName; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Loser の Blog!