集合(1)

1.ArrayList

1)线程不安全的
底层实现:
判断是否能容纳你想存入的元素个数.
扩容机制:1.5倍.
特点:
有序的:按照添加的顺序
不唯一:同一个元素可以装多次

1:如何创建泛型对象
ArrayList<泛型> list=new ArrayList<>();

2:如何添加元素:
一次添加一个元素:
list.add(元素);
一次添加多个元素:
Collections.addAll(集合,元素,元素,...);
3:得到集合元素的个数
list.size();
4:得到某一个元素
list.get(下标);
5:如何判断集合里面是否出现指定元素
list.contains();
6:遍历
for+下标
for(int x=0;x<list.size();x++){
    //x->下标
    //list.get(元素);
}
foreache
for(集合的泛型 x :list){
    //x->元素
}
迭代器********(重点)
for(得到迭代器对象;判断迭代器上面是否还有下一个元素;){
				取出下一个元素
			  }

for(Iterator<泛型>car=list.iterator();car.hasNext;){
    car.next();->元素
}

ArrayList 如何删除元素:

list.remove(int 下标);
下标指向谁就删除谁,如果下标不存在就抛出异常。
清空集合:list.clear();
list.remove(元素->参照物);
指定元素进行删除
*:一个remove只能删除一个对象。

2.linkedlist

1)线程不安全
底层实现 双向链表 (特点:增删快)

链表的执行方式

3. vector

也是实现list接口的,跟ArrayList几乎是一致的,只是在扩容的时候是不一样的,
ArrayList是1.5倍,而vector是想扩容几次扩容几次.
vector中存在synchronized,说明我们在多线程启动的时候,就会进行排队,一个一个的穿行,(但是我们并发的时候是并行)线程安全的控制的时候就是把并行变成穿行,

4.CopyOnWriteArrayLis

每一次操作的时候都会copy数据

lock.lock (既保证线程安全,又保证高并发下的线程安全)
lock 和 synchronized 的区别:(看看别人的想法)
synchronized无论是读还是写,都会进行加锁这种方式叫做重量级锁,是通过底层监视器对象去做控制,
操作的流程比较麻烦所以性能比较低下但是在
jdk中 给我们的cs机制的锁: (cs机制 reentrantLock,rediramlock)
在这我们知道在CopyOnWriteArrayLis中是通过reentrantLock加锁的方式来保证线程安全
CopyOnWriteArrayLis
他每次运行都会对数组进行一次copy所以不会出现报错信息;

CopyOnWriteArrayLis他并不适合于写的场景,只是适用于读的场景(适用于多线程读,效率更高,写的时候,一直进行copy,每次都会生成一个新的数组,容易引起内存溢出,在java虚拟机中,在处理垃圾对象中,发生在年轻代,如果年轻代内存设置不足,就会激发年轻代内存溢出,所以只有在读的场景下才会效率更高,前提是保证线程安全)

小结:

在选择 // ArrayList LinjedList vector CopyOnWriteArrayLis
1.在线程安全的情况下,写不是很频繁的情况下,首选CopyOnWriteArrayLis

2.在保证线程安全,又要想占用内存少,并且并发比较少建议使用vector ,vector 也是线程安全的

3.sychronized的特点:
加在普通方法上,当前的锁对象是实力本身,就相当于new一个vector
在这里插入图片描述如果又new一个vector,这两个vector没有发生并发,因为他们不是同一个对象,当前对象的锁的监视器对象(当前对象本身 ),在Java中,每一个对象都会有一个,监视器对象(jdk底层实现)
如果加在静态对象上.(它的监视器对象是它的类对象,class对象)

延伸问题:
一个对象的类对象有几个:1个
静态类在一个jvm中是全局的,是存在jvm中的持久代中,属于对堆内存中的一块,在一块公共区域 ,谁都能取

随堂知识点:

​ final: 添加到 类、方法、属性

Size:会给定一个初始化默认值,

​ native:c语言–>操作内存,

​ rangecheck:范围检查

​ while:迭代遍历,

​ synchronized:同步标志(重量级锁) (当前对象本身 ),

​ 静态变量:static 保存在jvm 持久代;

​ 内部类编译时:有两个class文件

​ final: 添加到 类、方法、属性

​ Size:会给定一个初始化默认值,

​ native:c语言–>操作内存,

​ rangecheck:范围检查

​ while:迭代遍历,

​ synchronized:同步标志(重量级锁)

​ 当前对象本身,

​ 静态变量:static 保存在jvm 持久代;

​ 内部类编译时:有两个class文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值