List集合
1.List集合储存元素特点:有序可重复
有序:List集合中的元素有下标从0开始,以1递增。
可重复:存储一个1,还可以再存储1
2.List是Collection接口的子接口,有自己的特有方法
以下只列出List接口特有的常用的方法:
void add(int index, E element) 在列表指定位置插入指定元素
E set(int index, E element) 修改指定下标的元素
E get(int index) 依据下标获取元素
int indexOf(Object o) 获取指定对象第一次出现处的索引
int lastIndexOf(Object o) 获取指定对象最后一次出现处的索引
E remove(int index) 删除指定下标位置元素
public class ListTest01 {
public static void main(String[] args) {
//List myList = new LinkedList();
//List myList = new Vector();
List myList = new ArrayList();
//添加元素
myList.add("A");//默认都是向集合末尾添加元素
myList.add("B");
myList.add("C");
myList.add("D");
//在列表指定位置插入指定元素(第一个参数是下标)
//这个方法使用不多,因为对于ArrayList集合来说,效率太低
myList.add(1,"dzhcool");
myList.add(0,1111);
Iterator it = myList.iterator();
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);//1111 A dzhcool B C D
}
//依据下标获取元素
System.out.println(myList.get(1));//A
for (int i = 0; i < myList.size(); i++) {
System.out.println(myList.get(i));//1111 A dzhcool B C D
}
//获取指定对象第一次出现处的索引
System.out.println(myList.indexOf("dzhcool"));//2
//获取指定对象最后一次出现处的索引
System.out.println(myList.lastIndexOf("dzhcool"));//2
//删除指定下标位置元素
myList.remove(0);
System.out.println(myList.size());//5
//修改指定下标位置的元素
myList.set(1,"李老八");
for (int i = 0; i < myList.size(); i++) {
System.out.println(myList.get(i));//A 李老八 B C D
}
}
}
ArrayList集合
1.默认初始化容量为10.(底层先创建了一个长度为10的数组,当添加第一个元 素时,初始化容量为10).
2.集合默认是一个Object[]数组.
3.构造方法:new ArrayList(); new ArrayList(20);
4.ArrayList的扩容:原容量的1.5倍
ArrayList的底层是数组,怎么优化?
因为ArrayList底层是数组,数组扩容率比较低,尽可能少扩容,应该先预估元素的个数,最后在通过构造方法,给定一个初始化容量.
5.数组的优点:
检索/查找效率较高:
(1)由于数组中的元素类型一致,所以每个元素占用空间大小是相同的;
(2)内存地址是连续的,知道首元素的地址,知道下标,通过计算就可以求得其他元素的内存地址;
(3)数组中存储100个元素或者存储100万个元素,在元素查询/检索方面,效率是相同的,因为数组中元素查找的时候不会一个一个找,是通过数学表达式计算出来的.(算出一个内存地址,直接定位的)
6.数组的缺点:
1)随即增删元素效率较低:为了保证数组中每一个元素的内存地址连续,所以在数组上随机删除或者增加元素的时候,效率极低,因为随机增删元素会涉及到后面元素统一向前或者向后位移的操作.(在增删数组最后一个元素的时候,不会有这样的问题,因为不存在向前移,或者向后移动)
2)数组无法存储大数据量:因为很难在数组中找到一块非常大且连续的一块空间.
7.ArrayList集合是非线程安全的集合.
阅读完上面的文章,你可能会有疑问,Collection是什么?Collection又有什么方法呢?
请看下回分解(其实就是自己没做好准备就开始写博客,骚瑞,下次好好弄)