java集合架構---List/Set

來源:互聯網
上載者:User

標籤:set   list   java集合架構   


|–List:元素是有序的,元素可以重複。因為該集合體系有索引。
|–ArrayList:底層的資料結構使用的是數組結構。特點:查詢速度很快,但是增刪較慢。線程不同步。
|–linkedList:底層使用的是鏈表資料結構。特點:增刪速度很快,查詢稍慢。
|–Vector:底層是數組資料結構。特點:線程同步,被ArrayList替代。

|–Set:元素是無序的,元素不可重複。
|–HashSet: 底層資料結構是雜湊表。線程是非同步的。
保證元素唯一性原理:判斷hashcode值是否相等,再判斷equals方法。
|–TreeSet: 可以對Set集合中的元素進行排序
底層結構是二叉樹
保證元素唯一性的依據:compareTo方法return 0
排序方法1:實現Comparable介面,並重寫compareTo方法
排序方法2:實現comparator介面,並重寫compare方法
package pack;
import java.util.*;

public class Demo {    public static void sys(Object obj) {        System.out.println(obj);    }    public static void main(String[] args) {        method8();    }    public static void method1() {        ArrayList al = new ArrayList();   //建立集合,collection的子類,ArrayList        al.add("java1");        al.add("java2");        al.add(1,"java9");  //增        al.remove(1);    //刪        al.set(1, "hello");  //改        al.get(1);  //查        al.add(23);        //al.remove("java1");        //al.clear();        sys(al.indexOf("hello"));           sys(al.isEmpty());        sys(al.contains("java"));        sys(al);     //輸出資料行表        sys("size="+al.size());        for(int i = 0;i<al.size();i++) {            al.get(i);        }        /*        Iterator it=al.iterator();  //擷取迭代器,取出元素        while(it.hasNext()) {            sys(it.next()); */        for(Iterator it = al.iterator();it.hasNext();) {            sys(it.next());         }       }    public static void method2() {        ArrayList al1 = new ArrayList();        al1.add("java1");        al1.add("java2");        al1.add("java3");        ArrayList al2 = new ArrayList();        al2.add("java2");        al2.add("java3");        al2.add("java4");        al1.retainAll(al2);  //取交集        al1.removeAll(al2);  //去除交集        /*for(Iterator it = al2.iterator();it.hasNext();) {            if(it.next().equals("java3"))                it.remove();    //此迭代器只能刪除,其它做不了,會出現並發修改異常。                                //所以出現了ListIterator        }*/        /*for(ListIterator li = al2.listIterator();li.hasNext();) {            if(li.next().equals("java2"))                al2.add("java");        }*/        sys(al2);       }       public static void method3() {        Vector v = new Vector();        v.add("java1");        v.add("java2");        v.add("java3");        //sys(v);        for(Enumeration en = v.elements();en.hasMoreElements();) //枚舉是Vector的特有取出方式            sys(en.nextElement());    }    public static void method4() {        LinkedList link = new LinkedList();        link.addFirst("java1");        link.addLast("java2");        link.addFirst("java3");        sys(link.getFirst());  //取        sys(link.removeFirst()); //取、刪        /*        while(!link.isEmpty()) {            sys(link.removeFirst());        }*/    }    public static void method5() {        HashSet hs = new HashSet();        hs.add("java1");        sys(hs.add("java1"));  //false,set裡無重複,添加失敗         hs.add("java2");        hs.add("java3");        hs.add("java4");        for(Iterator it = hs.iterator();it.hasNext();) {   //set只能迭代輸出            sys(it.next());        }    }    public static void method6() {        HashSet hs = new HashSet();        hs.add(new Person("aa",1));        hs.add(new Person("bb",6));        hs.add(new Person("cc",3));        hs.add(new Person("dd",4));        for(Iterator it = hs.iterator();it.hasNext();) {            sys(((Person)it.next()).getName());            sys(((Person)it.next()).getAge());        }    }    public static void method7() {      //TreeSet特點:比較性        TreeSet ts = new TreeSet();        ts.add(new Person("aa",1));        ts.add(new Person("bb",6));        ts.add(new Person("cc",3));        ts.add(new Person("dd",4));        /*for(Iterator it = ts.iterator();it.hasNext();) {  //4個元素排序了            sys(((Person)it.next()).getName()+((Person)it.next()).getAge());        }*/        Iterator it = ts.iterator();        while(it.hasNext()) {            Person p = (Person)(it.next());            sys(p.getName()+"----"+p.getAge());        }    }    public static void method8() {        TreeSet ts = new TreeSet(new Mycompare());  //往建構函式傳入比較子對象        ts.add(new Person("aa",1));        ts.add(new Person("bb",6));        ts.add(new Person("cc",3));        ts.add(new Person("dd",4));        Iterator it = ts.iterator();        while(it.hasNext()) {            Person p = (Person)(it.next());            sys(p.getName()+"----"+p.getAge());        }    }}/*該介面強制讓人對象具備比較性。因為TreeSet輸出要排序的,而人對象不具備比較性,輸出出錯,  因此要實現Comparable,並重寫compareTo方法*/class Person implements Comparable {    //實現介面是為了method7()    private  String name;    private  int age;    Person(String name,int age) {        this.name = name;        this.age = age;    }    public int compareTo(Object obj) {   //重寫compareTo方法,指定以年齡為排序方式        if(!(obj instanceof Person)) {            throw new RuntimeException("not Person object");        }        Person p = (Person)obj;        if(this.age>p.age)            return 1;        /*if(this.age==p.age)   //這是不對的,如果兩個人年齡相同救返回0,被認為是同一對象,         *                        按照Set的規則將不儲存後面這個元素            return 0;*/        if(this.age==p.age) {            return this.name.compareTo(p.name); //年齡相同時按照姓名排序        }        else            return -1;    }    public String getName() {        return name;    }    public int getAge() {        return age;    }}class Mycompare implements Comparator {    //實現個比較子,實現介面是為了method8()    public int compare(Object o1,Object o2) {    //重寫compare方法        Person p1 = (Person)o1;        Person p2 = (Person)o2;        int a = p1.getName().compareTo(p2.getName());  //按姓名比較        if(a==0) {            if(p1.getAge()>p2.getAge())                return 1;            if(p1.getAge()==p2.getAge())                return 0;            else                return -1;        }        return a;    }}

java集合架構---List/Set

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.