一、List子接口
-
特点:有序、有下标、元素可以重复
-
方法:
-
void add(int index,Object o); //在index位置插入对象o(基本类型自动装箱)
-
boolean addAll(int index,Collection c); //将一个集合中的元素添加到此集合中的index位置
-
Object get(int index); //返回集合中指定位置的元素
-
List subList(int fromIndex,int toIndex); //返回fromIndex和toIndex之间的集合元素
-
int indexOf(Object o); //返回此列表中第一次出现指定元素的索引;如果此列表不包含该元素,则返回-1
-
-
遍历方法:
-
for
-
增强for
-
Iterator迭代器
-
ListIterator列表迭代器(可以向前或向后遍历,增加删除和修改元素)
-
-
注意点:remove方法的传对象方式,其实调用了equals方法,实际上比较的是地址值。所以如果传入的是对象,则通过地址后进行删除,不存在该地址则不删除。如果想要通过new的方式去删除,则要重写该类的equals方法
二、List的实现类
一、ArrayList
-
数组结构实现,查询快、增删慢;
-
JDK1.2版本,运行效率快、线程不安全
-
默认容量:DEFAULT_CAPACITY=10;
-
注意:如果没有向集合中添加任何元素,默认容量是0;添加一个元素之后容量为10;当添加第11个元素时,会扩容到15。
-
也就是说,每次扩容都是上次的1.5倍
-
存放元素的数组:elementData
-
实际的元素个数:size
public boolean add(E e){ ensureCapacityInternal(size + 1); //Increments modCount!! elementData[size++] =e; return true; } private void ensureCapacityInternal(int minCapacity){ if(elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA){ minCapacity=Math.max(DEFAULT_CAPACITY,minCapacity) } ensureExplicitCapacity(minCapacity); } private void ensureExplicitCapacity(int minCapacity){ modCount++; //overflow-conscious code if(minCapacity - elementData.length >0){ grow(minCapacity); } } private void grow(int minCapacity){ //overflow - conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity+(oldCapacity >> 1); if(newCapacity - minCapacity <0){ newCapacity = minCapacity; } if(newCapacity -MAX_ARRAY_SIZE >0){ newCapacity = hugeCapacity(minCapacity); //minCapacity is usually close to size ,so this is a win; elementData=Arrays.copyOf(elementData,newCapacity); } }
二、Vector
-
数组结构实现,查询快、增删慢;
-
JDK1.0版本,运行效率慢、线程安全
-
大部分方法和ArrayList类似,它的独有遍历方法是枚举器
-
elements();
-
firstElement();
-
lastElement();
-
elementAt();
-
Enumeration en = vector.elements(); while(en.hasMoreElements()){ String o = (String)en.nextElement(); System.out.println(o); }
三、LinkedList
-
链表结构实现,增删快、查询慢
-
方法基本和ArrayList相同
-
ArrayList和LinkedList的区别
-
ArrayList:必须开辟连续空间,查询快增删慢。
-
LinkedList:无需开辟连续空间,查询慢增删快。
-