仅供个人学习,如有侵权请联系删除。
List集合的特有功能概述
* void add(int index,E element)
* E remove(int index)
* E get(int index)
* E set(int index,E element)
public static void main(String[] args) {
demo1();
//demo2();
//demo3();
//demo4();
//demo5();
}
public static void demo5() {
List list = new ArrayList();
//通常用的是ArrayList list = new ArrayList();,此时仅仅为了使用List类中的方法
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.set(1, "z"); //将指定位置的元素修改
System.out.println(list);
}
//[a, z, c, d]
public static void demo4() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//Object obj1 = list.get(2);
//System.out.println(obj1);
//通过索引遍历List集合
for(int i = 0;i < list.size(); i++) {
System.out.println(list.get(i));
}
}
/*
a
b
c
d
*/
public static void demo3() {
List list = new ArrayList();
list.add(111);
list.add(222);
list.add(333);
list.remove(111);
//这里会报错。删除的时候不会自动装箱,把111当作索引,只要传入的是整数,就把其当做索引
System.out.println(list);
}
public static void demo2() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
Object obj = list.remove(1); //通过索引删除元素,将被删除的元素返回
System.out.println(obj);
System.out.println(list);
}
/*
b
[a, c, d]
*/
public static void demo1() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add(4, "f"); //index<=size并且index>=0都不会报异常
//list.add(1,"e");
//list.add(10, "z"); //java.lang.IndexOutOfBoundsException,当存储时使用不存在的索引时
System.out.println(list);
}
//[a, b, c, d, f]
向List集合中存储学生对象
通过size()和get()方法结合使用遍历
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Student("张三", 23)); //Object obj = new Student("张三",23);
list.add(new Student("李四", 24));
list.add(new Student("王五", 25));
list.add(new Student("赵六", 26));
for(int i = 0; i < list.size(); i++) {
//System.out.println(list.get(i)); //通过索引获取每一个元素
Student s = (Student)list.get(i);
System.out.println(s.getName() + "..." + s.getAge());
}
}
/*
张三...23
李四...24
王五...25
赵六...26
*/
需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
public static void main(String[] args) {
List list = new ArrayList();
list.add("a"); //Object obj = new String();
list.add("b");
list.add("world");
list.add("c");
list.add("d");
list.add("e");
/*Iterator it = list.iterator(); //获取迭代器
while(it.hasNext()) { //判断集合中是否有元素
String str = (String)it.next(); //向下转型
if("world".equals(str)) {
list.add("javaee");
//遍历的同时在增加元素,并发修改ConcurrentModificationException
}
}*/
/*这个方法会报错,获取迭代器的过程中,迭代器自己知道有多少个元素,但是中途又添加了一个元素,而迭代器中的个数没有增加,此刻就会报错。解决方案:
迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
集合遍历元素,集合修改元素
需要用到下面的listIterator而非iterator的add方法*/
ListIterator lit = list.listIterator(); //获取迭代器(List集合特有的)
while(lit.hasNext()) {
String str = (String)lit.next(); //向下转型
if("world".equals(str)) {
//list.add("javaee");
//遍历的同时在增加元素,并发修改ConcurrentModificationException
lit.add("javaee");
}
}
System.out.println(list);
}
boolean hasNext()是否有下一个
boolean hasPrevious()是否有前一个
Object next()返回下一个元素
Object previous();返回上一个元素
* 数组
* 查询快修改也快
* 增删慢
* 链表
* 查询慢,修改也慢
* 增删快
集合框架(List的三个子类的特点)
* List的三个子类的特点
*
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
Vector相对ArrayList查询慢(线程安全的)
Vector相对LinkedList增删慢(数组结构)
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
Vector和ArrayList的区别
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
共同点:都是数组实现的
ArrayList和LinkedList的区别
ArrayList底层是数组结果,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全的
* List有三个儿子,我们到底使用谁呢?
查询多用ArrayList
增删多用LinkedList
如果都多ArrayList