import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 测试List接口常用方法:
* 1.List集合存储元素特点:有序可重复
* 有序:List集合中的元素有下标,从0开始,以1递增
* 可重复:存储一个1,还可再存储1
* 2、List是Collection接口的子接口,有自己的特有方法:
* 常用的特有的方法:
* void add(int index, E element) 在列表中指定的位置上插入指定的元素(可选操作)。
* E get(int index)返回此列表中指定位置的元素。
* int indexOf(Object o) 返回此列表中指定元素的第一个出现的索引,或-如果此列表不包含元素,或- 1
* int lastIndexOf(Object o) 返回此列表中指定元素的最后一个发生的索引,或-如果此列表不包含元素,或- 1。
* E remove(int index) 移除此列表中指定位置的元素(可选操作)。
* E set(int index, E element) 用指定元素替换此列表中指定位置的元素(可选操作)。
*/
public class ListTest01 {
public static void main(String[] args) {
List myList = new ArrayList();
myList.add(12);
myList.add(13);
myList.add(14);
myList.add(12);
myList.add(1,99);
//用的不多,涉及到数组位移的问题,效率不高
System.out.println("获取下标为1的元素: " +myList.get(1));
Iterator it = myList.iterator();
while (it.hasNext()){
System.out.print(" " + it.next());
}
System.out.println("\n--------------");
for (int i = 0; i < myList.size(); i++) {
//System.out.println(myList[i]);不能这样写
System.out.print(" " + myList.get(i));
}
/**
* list特有的方式,Set没有
* 有下标,所以List有自己特殊的遍历方式
*/
System.out.println("\n---------------");
System.out.println("获取第一次出现的索引: " + myList.indexOf(12));
System.out.println("获取最后一次出现的索引: " + myList.lastIndexOf(12));
System.out.println("----------------");
myList.set(0,"werwt");
Iterator it2 = myList.iterator();
while (it2.hasNext()){
System.out.print(" " + it2.next());
}
System.out.println("\n----------------");
myList.remove(0);
for (int i = 0; i < myList.size(); i++) {
//System.out.println(myList[i]);不能这样写
System.out.print(" " + myList.get(i));
}
/**
* 计算机英语:
* 增删改查:
* 增:add,save,new
* 删:delete,drop,remove
* 改:update,set,modify
* 查:find,get,query,select
*/
}
}
import java.util.ArrayList;
import java.util.List;
/*
* ArrayList集合:
* 1、默认初始化容量是10(底层先创建一个长度为0的数组,当添加第一个元素的时候,初始化容量10)
* 2、集合底层是一个Object【】数组
* 3、构造方法:
* new ArrayList()
* 4、ArrayList的扩容:
* 原容量的1.5倍
* ArrayList集合底层是数组,怎么优化?
* 尽肯能少的扩容,因为数组扩容效率比较低,建议使用ArrayList集合的时候
* 预估元素的个数,给定一个初始化的容量
* 5、数组的优点:检索效率比较高
* (每个元素占用空间大小相同,内存地址连续的,知道首元素内存地址,知道下标
* 可以计算出元素的内存地址,所以检索效率最高)
* 6、数组的缺点:随机增删元素效率比较低
* 数组无法存储大数据量,很难找到一块大的连续内存空间
* 7、注意:想数组末尾添加元素,效率还是很高的
* 8、这么多集合中,你用哪个集合最多?
* ArrayList 因为:往数组末尾添加元素,效率不受影响
* 另外,我们查找/检索某个元素的操作比较多
* 9、ArrayList是非线程安全的
* */
public class ListTest02 {
public static void main(String[] args) {
List list = new ArrayList();
System.out.println(list.size());
//size获取的是集合中元素的个数,不是集合的容量,这两个个数都是0
List list1 = new ArrayList(20);
System.out.println(list1.size());
/**
* 100 二进制装换成10进制:0000 0100右移一位 0000 0010(2) 【4/2】
* 原先是4 现在增长2 ,增长之后的容量是之前容量的1.5倍
*
* 这个地方有一个位运算: >> <<
* >>1 左移一位 0000 1010 --> 0000 0101 (10 --> 5)
* 1<< 右移一位 0001 0100 (10 --> 20)
*
* 左移一位就是除以2的1次方
* 右移一位就是乘以2的1次方
* 依次类推
*
* int newCapacity = ArraysSupport.newLength(oldCapacity,
* minCapacity - oldCapacity,
* oldCapacity >> 1
*
*/
}
}