集合-02

集合-02

关于java.util.collection接口中常用的方法。
1、Collection中能存放什么元素?
没有使用泛型之前,collection中可以存储object的所有子类型。使用了泛型之后,collection中只能存储某个具体的类型。
(集合中不能直接存储基本数据类型,也不能存java对象,只是存储java对象的内存地址。)

2、Collection中的常用方法
boolean add(object e) 向集合中添加元素
int size() 获取集合中元素的个数
void clear() 清空集合
boolean contains(0bject o) 判断当前集合中是否包含元素o,包含返回true,不包含返回false
boolean remove(object o) 删除集合中的某个元素。
boolean isEmpty()判断该集合中元素的个数是否为0
object[ ] toArray() 调用这个方法可以把集合转换成数组。

3、Collection的contains方法和remove方法都是需要重写equals方法的,不然比较的就是内存地址,而不是比较内容。(String类的equals方法就是重写了的,所以它比较的是内容)

4、关于集合元素的remove
重点:当集合的结构发生改变时,迭代器必须重新获取,如果还是用以前老的迭代器,会出现异常: java.util.ConcurrentModificationException

重点:在迭代集合元素的过程中,不能调用集合对象的remove方法删除元素
例如:c.remove(o);//迭代过程中不能这样。
会出现 :java.util.ConcurrentNodificationException

重点:在迭代元素的过程当中,一定要使用迭代器Iterator的remove方法,删除元素,不要使用集合自带的remove方法删除元素。只有这样才会自动更新迭代器和集合

5、
(1)List集合存储元素特点:有序可重复
有序:List集合中的元素有下标。从e开始,以1递增。
可重复:存储一个1,还可以再存储1.
(2)List既然是collection接口的子接口,那么肯定List接口有自己"特色”的方法:
List接口特有的常用的方法:

void add(int index,0bject element)
object get(int index)
int index0f(Object o)
int lastIndexof(Object o)
object remove(int index)
object set(int index,object element)

6、ArrayList集合:
(1)默认初始化容量10(底层先创建了一个长度为o的数组,当添加第一个元素的时候,初始化容量10。)

(2)集合底层是一个object[]数组。

(3)构造方法:

 new ArrayList();//无参构造方法
 new ArrayList( 20);//有参构造方法

(4)ArrayList集合的扩容: 增长到原容量的1.5倍。

(5)ArrayList集合底层是数组,怎么优化?
尽可能少的扩容。因为数组扩容效率比较低,建议在使用ArrayList集合的时候预估计元素的个数,给定一个初始化容量。

(6)数组优点:
检索效率比较高。(每个元素占用空间大小相同,内存地址是连续的,知道首元素内存地址,然后知道下标,通过数学表达式计算出元素的内存地址,所以检索效率最高。)

(7)数组缺点:
随机增删元素效率比较低。
另外数组无法存储大数据量。(很难找到一块非常巨大的连续的内存空间。)

(8)向数组末尾添加元素,效率很高,不受彩响。

(9)这么多的集合中,用哪个集合最多?
答: ArrayList集合。
因为往数组末尾添加元素,效率不受影响。另外,我们检索/查找某个元素的操作比较多。
(10)set集合转list集合

//指定初始化容量100
List myList2 = new ArrayList( 100) ;
//创建一个HashSet集合
Collection c = new HashSet();//添加元素到set集合
c.add(100);
c.add(200);
c.add(900);
c.add(50);
//通过这个构造方法就可以将HashSet集合转换成List集合。
List myList3 = new ArrayList(c);
for(int i = 0; i < myList3.size(); i++){
system.out.println(myList3.get(i));
}

7、Vector集合
(1)底层也是一个数组。
(2)初始化容量:10
(3)怎么扩容的?
扩容之后是原容量的2倍。10–>20 -->40 --> 80
(4)ArrayList集合扩容特点:
ArrayList集合扩容是原容量1.5倍。
(5)Vector中所有的方法都是线程同步的,都带有synchronized关键字,是线程安全的。效率比较低,使用较少了。
(6)怎么将一个线程不安全的ArrayList集合转换成线程安全的呢?
使用集合工具类:

java.util.collections;

注意:java.util.Collection是集合接口。
java.util.Collections是集合工具类。

(7)

//这个可能以后要使用!! ! !
List myList = new ArrayList();//非线程安全的。
//变成线程安全的
Collections. synchronizedList(myList);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值