List集合的特有功能
* void add(int index,Eelement)——指定索引位置删除元素
* E remove(int index)——删除的时候不会自动装箱,删除指定的索引,并将删除元素返回
* E get(int index)
* E set(int index,Eelement)——将指定位置的元素修改
List集合遍历方式
1.转成数组遍历
2.迭代器遍历
3.通过size()和get()遍历
4.高级for遍历
案例:List集合存储学生对象并遍历
public class List_Demo {
public static void main(String[] args) {
demo1();
}
private static void demo1() {
List list = new ArrayList();
list.add(new Student("张三", 11));
list.add(new Student("丫蛋", 18));
list.add(new Student("狗剩", 20));
// 方式一:普通for遍历
for (int i = 0; i < list.size(); i++) {
Student s = (Student) list.get(i);
System.out.println(s.getName() + ":" + s.getAge());
}
System.out.println("----------------------------");
// 方式二:迭代器进行遍历
Iterator it = list.iterator();
while (it.hasNext()) {
Student s = (Student) it.next();
System.out.println(s.getName() + ":" + s.getAge());
}
System.out.println("----------------------------");
//方式三:增强for遍历
for(Object obj :list){
Student s = (Student) obj;
System.out.println(s.getName() + ":" + s.getAge());
}
}
}
集合案例
需求:判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素
public class List_Demo {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("world");
list.add("e");
//方式一:
/* Iterator it = list.iterator();//获取迭代器
while(it.hasNext()){//判断集合中是否有元素
String str = (String) it.next();//向下转型
if("world".equals(str)){
list.add("javaee");//遍历的同时在增加元素并修改
//这里报了异常:ConcurrentModificationException
}
}*/
//方式一修改:
ListIterator lit = list.listIterator();//List集合中特有的迭代器
while(lit.hasNext()){//判断集合中是否有元素
String str = (String) lit.next();//向下转型
if("world".equals(str)){
lit.add("javaee");//遍历的同时在增加元素并修改
}
}
System.out.println(list);
}
}
案例总结:
容器中添加了五个元素,迭代器知道,但是如果在while循环中在添加元素,迭代器就不知道了,注意:在Iterator中只有判断hasNext()、取出next()、删除remove()方法。
ListIterator(List集合中特有的迭代器)
* booleanhasNext()是否有下一个
* booleanhasPrevious()是否有前一个
* Object next()返回下一个元素
* Object previous();返回上一个元素
Vector特有功能
* public void addElement(Eobj)
* public E elementAt(intindex)
* public Enumerationelements()
Vector的迭代:
<span style="white-space:pre"> </span>Vector v = new Vector(); //创建集合对象,List的子类
v.addElement("a");
v.addElement("b");
v.addElement("c");
v.addElement("d");
//Vector迭代
Enumeration en = v.elements(); //获取枚举
while(en.hasMoreElements()) { //判断集合中是否有元素
System.out.println(en.nextElement());//获取集合中的元素
}
List三个子类的特点
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
Vector和ArrayList的区别:
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
ArrayList和LinkList的区别:
ArrayList底层数据结构是数组,查询和修改快
LinkedList底层数据结构是链表,增和删比较快,查询和修改比较慢
共同点:线程都是不安全的
我们到底用谁?
查询多用ArrayList
增删多用LinkedList
如果都多ArrayList