亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Java基礎(chǔ)-集合類

原創(chuàng) 2016-11-07 10:34:29 425
摘要:list集合的特點(diǎn)1)有序(存儲(chǔ)和取出的元素一直)2)可重復(fù)list存儲(chǔ)字符串并遍歷import java.util.List; import java.util.ArrayList; import java.util.Iterator;public class ListTest1{    public&nb

list集合的特點(diǎn)
1)有序(存儲(chǔ)和取出的元素一直)
2)可重復(fù)

list存儲(chǔ)字符串并遍歷

import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;public class ListTest1{    public static void main(String[] args){        //創(chuàng)建集合對(duì)象
        List list = new ArrayList();        //創(chuàng)建字符串并添加字符串
        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);
        }
    }
}
-----------------------------
輸出結(jié)果
wu
jia
dong
-------------------------------

練習(xí):list存儲(chǔ)自定義對(duì)象并遍歷

import java.util.List;import java.util.ArrayList;import java.util.Iterator;public class ListDemo2{    public static void main(String[] args){        //創(chuàng)建集合對(duì)象
        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;    //無(wú)參構(gòu)造方法
    public Student(){        super();
    }    //有參構(gòu)造方法
    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+"]";
    }
}
--------------------------------------
輸出結(jié)果
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):根據(jù)索引刪除元素,返回被刪除的元素

5)修改功能

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

示例:

向指定位置添加元素

/*
*void add(int index,Object element):在指定位置添加元素
*/import java.util.ArrayList;
import java.util.List;public class ListDemo3{    public static void main(String[] args){        //創(chuàng)建集合對(duì)象
        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);
    }
}
-------------------------------------
輸出結(jié)果
最先的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){        //創(chuàng)建集合對(duì)象
        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循環(huán)改進(jìn)
        //遍歷的方式是size()和get()
        for(int i = 0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    
        
    }
}
--------------------------------------
輸出結(jié)果
aaa
bbb
----------------------
aaa
bbb
ccc
ddd
--------------------------------------

list存儲(chǔ)自定義對(duì)象并遍歷

import java.util.List;import java.util.ArrayList;public class ListDemo5{    public static void main(String[] args){        //創(chuàng)建集合對(duì)象
        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;    
    //無(wú)參構(gòu)造方法
    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+"]";
    }
}
-------------------------------------
輸出結(jié)果
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){        //創(chuàng)建集合對(duì)象        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);                                }    }}=-------------輸出結(jié)果hivehabasesqoop----------------------
/*
特有功能
Object previous():獲取上一個(gè)元素
boolean hasPrevious():判斷是否有元素
注意:ListIterator可以實(shí)現(xiàn)逆向遍歷,但須先正向遍歷,所以無(wú)意義,不使用
*/import java.util.List;import java.util.ArrayList;import java.util.ListIterator;public class ListDemo6{    public static void main(String[] args){        //創(chuàng)建集合對(duì)象
        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);
        }
    
    }
}
----------------------------------
輸出結(jié)果
hive
habase
sqoop
-----------------------
sqoop
habase
hive
---------------------------------

并發(fā)修改異常:ConcurrentModificationException

/*
一個(gè)集合,判斷是否有"cccc"這個(gè)元素,如果有添加一個(gè)“wujiadong”元素
該異常產(chǎn)生原因:迭代器是依賴于集合而存在,在判斷成功后,集合中添加了新元素,而迭代器卻不知道,所以報(bào)錯(cuò)。即迭代器遍歷元素時(shí),通過(guò)集合不能修改元素
*/import java.util.List;
import java.util.ArrayList;
import java.util.ListIterator;public class ListDemo7{    public static void main(String[] args){        //創(chuàng)建集合對(duì)象
        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);
    
    }
}
------------------------------------------
輸出結(jié)果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)

注釋:當(dāng)方法檢測(cè)到對(duì)象的并發(fā)修改,但不允許這種修改時(shí),拋出此異常
------------------------------------------

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

/*方式1:用迭代器,元素時(shí)添加在剛才迭代的元素后面*/import java.util.List;import java.util.ArrayList;import java.util.ListIterator;public class ListDemo7{    public static void main(String[] args){        //創(chuàng)建集合對(duì)象
        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");//通過(guò)迭代器添加元素
            }
        }
        System.out.println(list);
    
    }
}
------------------------------------------
輸出結(jié)果
[aaaa, bbbb, cccc, wujiadong, dddd]
-------------------------------------------
/*
方式2:用集合,元素添加在最后
*/import java.util.List;
import java.util.ArrayList;public class ListDemo7{    public static void main(String[] args){        //創(chuàng)建集合對(duì)象
        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);
    }
}
-----------------------------------------------
輸出結(jié)果
[aaaa, bbbb, cccc, dddd, wujiadong]
-------------------------------------------------

List子類的特點(diǎn)

ArrayList
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢
線程不安全,效率高

Vector
底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢
線程安全,效率低

LinkedList
底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快
線程不安全,效率高



發(fā)佈手記

熱門詞條