Java基础-集合类

Original 2016-11-07 10:34:29 421
abstract:list集合的特点1)有序(存储和取出的元素一直)2)可重复list存储字符串并遍历import java.util.List; import java.util.ArrayList; import java.util.Iterator;public class ListTest1{    public&nb

list集合的特点
1)有序(存储和取出的元素一直)
2)可重复

list存储字符串并遍历

import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;public class ListTest1{    public static void main(String[] args){        //创建集合对象
        List list = new ArrayList();        //创建字符串并添加字符串
        list.add("wu");        list.add("jia");        list.add("dong");        //遍历集合
        Iterator it = list.iterator();        while(it.hasNext()){
            String s = (String) it.next();
            System.out.println(s);
        }
    }
}
-----------------------------
输出结果
wu
jia
dong
-------------------------------

练习:list存储自定义对象并遍历

import java.util.List;import java.util.ArrayList;import java.util.Iterator;public class ListDemo2{    public static void main(String[] args){        //创建集合对象
        List list = new ArrayList();
        Student s1 = new Student("wu",21);
        Student s2 = new Student("jia",22);
        Student s3 = new Student("dong",23);
        list.add(s1);
        list.add(s2);
        list.add(s3);
        
        Iterator it = list.iterator();        while(it.hasNext()){
            Student s = (Student) it.next();
            System.out.println(s);
        }
    }
}class Student{    //成员变量
    private String name;    private int age;    //无参构造方法
    public Student(){        super();
    }    //有参构造方法
    public Student(String name,int age){        this.name = name;        this.age = age;
    }    //setXxx()方法和getXxx()方法
    public void setName(String name){        this.name = name;
    }    public String getName(){        return name;
    }    public void setAge(int age){        this.age = age;
    }    public int getAge(){        return age;
    }    //toString()方法
    public String toString(){        return "Student [name="+name+",age="+age+"]";
    }
}
--------------------------------------
输出结果
Student [name=wu,age=21]
Student [name=jia,age=22]
Student [name=dong,age=23]
-------------------------------------

List集合特有的功能

1)添加功能

void add(int index, Object element):在指定位置添加元素

2) 获取功能

Object get(int index):获取指定位置的元素

3)列表迭代器

ListIterator listIterator():List集合特有的迭代器

4)删除功能

Object remove(int index):根据索引删除元素,返回被删除的元素

5)修改功能

Object set(int index, Object element):根据索引修改元素,返回被修改的元素

示例:

向指定位置添加元素

/*
*void add(int index,Object element):在指定位置添加元素
*/import java.util.ArrayList;
import java.util.List;public class ListDemo3{    public static void main(String[] args){        //创建集合对象
        List list = new ArrayList();        
        list.add("hadoop");        list.add("spark");        list.add("storm");
        
        System.out.println("最先的list:"+list);        //向指定位置添加元素
        list.add(1,"data");
    
        System.out.println("指定位置添加元素后的list:"+list);
    }
}
-------------------------------------
输出结果
最先的list:[hadoop, spark, storm]
指定位置添加元素后的list:[hadoop, data, spark, storm]
---------------------------------------

get()方法获取指定元素和list的遍历

import java.util.List;import java.util.ArrayList;public class ListDemo4{    public static void main(String[] args){        //创建集合对象
        List list = new ArrayList();        //添加元素
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");        //get()方法获取指定位置的元素
        System.out.println(list.get(0));
        System.out.println(list.get(1));
        System.out.println("----------------------");        
        //for循环改进
        //遍历的方式是size()和get()
        for(int i = 0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    
        
    }
}
--------------------------------------
输出结果
aaa
bbb
----------------------
aaa
bbb
ccc
ddd
--------------------------------------

list存储自定义对象并遍历

import java.util.List;import java.util.ArrayList;public class ListDemo5{    public static void main(String[] args){        //创建集合对象
        List list = new ArrayList();
    
        Student s1 = new Student("www",21);
        Student s2 = new Student("jjj",22);
        Student s3 = new Student("ddd",24);
        list.add(s1);
        list.add(s2);
        list.add(s3);        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    }
}class Student{    //成员变量
    private String name;    private int age;    
    //无参构造方法
    public Student(){        super();
    }    public Student(String name,int age){        this.name = name;        this.age = age;
    }    //get和set方法
    public void setName(String name){        this.name = name;
    }    public String getName(){        return name;
    }    public void setAge(int age){        this.age = age;
    }    public int getAge(){        return age;
    }    public String toString(){        return "Student [name="+name+",age="+age+"]";
    }
}
-------------------------------------
输出结果
Student [name=www,age=21]
Student [name=jjj,age=22]
Student [name=ddd,age=24]
---------------------------------------------
也可用迭代器去遍历

列表迭代器ListIterator

/* 
*列表迭代器:
ListIterator listIterator():List集合特有的迭代器该迭代器继承了Iterator迭代器,所有可以直接使用hasNext()和next()方法*/import java.util.List;import java.util.ArrayList;import java.util.Iterator;import java.util.ListIterator;public class ListDemo6{    public static void main(String[] args){        //创建集合对象        List list = new ArrayList();            list.add("hive");        list.add("habase");        list.add("sqoop");/*              Iterator it = list.iterator();        while(it.hasNext()){            String s = (String) it.next();            System.out.println(s);      */                      ListIterator it = list.listIterator();        while(it.hasNext()){            String s = (String) it.next();            System.out.println(s);                                }    }}=-------------输出结果hivehabasesqoop----------------------
/*
特有功能
Object previous():获取上一个元素
boolean hasPrevious():判断是否有元素
注意:ListIterator可以实现逆向遍历,但须先正向遍历,所以无意义,不使用
*/import java.util.List;import java.util.ArrayList;import java.util.ListIterator;public class ListDemo6{    public static void main(String[] args){        //创建集合对象
        List list = new ArrayList();
    
        list.add("hive");
        list.add("habase");
        list.add("sqoop");        
        ListIterator it = list.listIterator();        while(it.hasNext()){            String s = (String) it.next();            System.out.println(s);
        }        System.out.println("-----------------------");        //逆向遍历
        while(it.hasPrevious()){            String s = (String) it.previous();            System.out.println(s);
        }
    
    }
}
----------------------------------
输出结果
hive
habase
sqoop
-----------------------
sqoop
habase
hive
---------------------------------

并发修改异常:ConcurrentModificationException

/*
一个集合,判断是否有"cccc"这个元素,如果有添加一个“wujiadong”元素
该异常产生原因:迭代器是依赖于集合而存在,在判断成功后,集合中添加了新元素,而迭代器却不知道,所以报错。即迭代器遍历元素时,通过集合不能修改元素
*/import java.util.List;
import java.util.ArrayList;
import java.util.ListIterator;public class ListDemo7{    public static void main(String[] args){        //创建集合对象
        List list = new ArrayList();    
        list.add("aaaa");        list.add("bbbb");        list.add("cccc");        list.add("dddd");
        ListIterator it = list.listIterator();        while(it.hasNext()){
            String s = (String) it.next();            if("cccc".equals(s)){                list.add("wujiadong");
            }
        }
        System.out.println(list);
    
    }
}
------------------------------------------
输出结果Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
    at java.util.ArrayList$Itr.next(ArrayList.java:851)
    at ListDemo7.main(ListDemo7.java:17)

注释:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常
------------------------------------------

解决方法
1)迭代器遍历元素,迭代器修改元素
2)集合遍历元素,集合修改元素

/*方式1:用迭代器,元素时添加在刚才迭代的元素后面*/import java.util.List;import java.util.ArrayList;import java.util.ListIterator;public class ListDemo7{    public static void main(String[] args){        //创建集合对象
        List list = new ArrayList();
    
        list.add("aaaa");
        list.add("bbbb");
        list.add("cccc");
        list.add("dddd");
        ListIterator it = list.listIterator();//注意这里不能用Iterator,该接口中不含add方法
        while(it.hasNext()){
            String s = (String) it.next();            if("cccc".equals(s)){
                it.add("wujiadong");//通过迭代器添加元素
            }
        }
        System.out.println(list);
    
    }
}
------------------------------------------
输出结果
[aaaa, bbbb, cccc, wujiadong, dddd]
-------------------------------------------
/*
方式2:用集合,元素添加在最后
*/import java.util.List;
import java.util.ArrayList;public class ListDemo7{    public static void main(String[] args){        //创建集合对象
        List list = new ArrayList();    
        list.add("aaaa");        list.add("bbbb");        list.add("cccc");        list.add("dddd");        for(int i=0;i<list.size();i++){
            String s = (String) list.get(i);            if("cccc".equals(s)){                list.add("wujiadong");
            }
        }   
        System.out.println(list);
    }
}
-----------------------------------------------
输出结果
[aaaa, bbbb, cccc, dddd, wujiadong]
-------------------------------------------------

List子类的特点

ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高

Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低

LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高



Release Notes

Popular Entries