java中集合的特點



java中集合的特點


集合的關係圖


/**
 * 集合的特點
 * 1.用於存儲對象的容器
 * 2.集合的長度 是可變 的
 * 3.集合中不可以存儲 基本數據類型值
 *
 * 集合容器因爲內部的數據結構不同,有多種具體容器,不斷向上抽取,就形成了集合框架
 * 框架的頂層Collection接口
 *
 * Collection的常見方法
 *
 * 1.添加
 *    boolean add(E e)  確保此 collection 包含指定的元素(可選操作)。
 *    boolean addAll(Collection c)
 * 2.刪除
 *    boolean remove()
 *    boolean removeAll()
 * 3.判斷
 *    boolean contains()
 *    boolean containsAll()
 *    boolean isEmpty():判斷集合中是否有元素
 * 4.獲取
 *    int size():返回此Collection中的元素數
 *    Iterator  iterator:取出元素的方式 :迭代器
 *    該對象必須依賴於具體的容器,因爲每一個容器的數據結構都 不同
 *    所以該迭代器對象 是在容器中進行內部實現的
 *    對於使用容器者而言,具體的實現不重要,只要通過窗口獲取到該實現的迭代器對象即可
 *    也就是iterator()方法
 * 5.其它
 *    boolean retainAll():取交集  將兩個集合中的相同元素從調用removeAll的集合中移除
 *    Object[] toArray():將集合轉成數組
 *
 *
 * -----------------------------------
 *  Collection
 *   兩個最重要的子類
 *   1.List:有序(存入和取出的順序一致),元素都 有索引,元素可以重複
 *   2.Set:元素不能重複,無序。
 *
 *   List:特有的常見方法,有一個共性特點就是都可以操作角標
 *       1.添加
 *          boolean add(int index, E element)在列表的指定位置插入指定元素(可選操作)。
 *       2.刪除
 *          boolean remove(Object o)從此列表中移除第一次出現的指定元素(如果存在)(可選操作)。
 *       3.修改
 *          Object set(index,element)
 *       4.獲取
 *           Object get(index)
 *           int indexOf(object)
 *           int lastIndexOf(object)
 *           List subList(int fromIndex, int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之間的部分視圖。
 *
 *  List集合是可以完成對元素的增刪改查的
 *
 *  List:
 *    ---Vector:內部是數組數據結構,是同步的(線程安全)。增刪,查詢都很慢。
 *    ---ArrayList:內部是數組結構,是不同步的。替代Vector.查詢的速度快。
 *    ---LinkedList:內部是鏈表數據結構,是不同步的。增刪元素的速度很快。
 *
 *  LinkedList:
 *     addFirst();
 *     addLast();
 *
 *     getFirst();//獲取但不移除,如果鏈表爲空,拋出異常NoSuchElementException
 *     getLast();
 *     jdk1.6以後
 *     pollFirst();//獲取但不移除,如果鏈表爲空 ,返回null;
 *     pollLast();//
 *
 */

//Collection的demo
public class CollectionDemo {
    public static void main(String[]args){
        Collection collection = new ArrayList();
        show(collection);
    }

    private static void show(Collection collection) {
        collection.add("aaa");
        collection.add("bbb");
        collection.add("ccc");
        collection.add("ddd");


        System.out.println(collection);
    }
}
//IteratorDemo
public class IteratorDemo {
    public static void main(String[]args){
        Collection collection = new ArrayList();
        collection.add("aaa");
        collection.add("bbb");
        collection.add("ccc");
        collection.add("ddd");

        //使用了Collection中的iterator()方法。調用 集合中的迭代器,是爲了獲取集合中的迭代器對象

        //用法一
        Iterator iterator = collection.iterator();
//        while (iterator.hasNext()){
//            System.out.println(iterator.next());
//        }

        //用法二
        for (Iterator iterator1 = collection.iterator();iterator1.hasNext();){
            System.out.println(iterator1.next());
        }
    }
}
//ListDemo
public class ListDemo{
        public static void main(String[]args){
            List list = new ArrayList();
            list.add("aaa");
            list.add("bbb");
            list.add("ccc");
            list.add("ddd");
            list.add("eee");
            System.out.println(list);
            //插入元素
//            list.add(1,"fff");
//            System.out.println(list);
            //刪除元素
//            System.out.println(list.remove(1));
            //修改元素
//            System.out.println(list.set(3,"iii"));
            //獲取元素
//            System.out.println(list.get(4));
            //獲取子元素
            System.out.println(list.subList(2,4));

            System.out.println(list);
        }

//ListDemo2
public class ListDemo2 {
    public static void main(String[]args){
        List list = new ArrayList();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.add("ddd");
        list.add("eee");
        System.out.println(list);

        ListIterator listIterator = list.listIterator();
        //它可以實現在迭代過程 中完成 對元素的增刪改查
        //注意,只有list列表具備些功能
        while (listIterator.hasNext()){
            Object ob = listIterator.next();
            if (ob.equals("bbb")){
                listIterator.add("ggg");
            }
        }
        System.out.println(list);

        while (listIterator.hasPrevious()){
            System.out.println(listIterator.previous());
        }
        System.out.println(list);
/*
        Iterator iterator=list.iterator();
        while (iterator.hasNext()){
            //如果這樣寫,會報錯,在迭代過程中,不要使用集合操作元素,容易拋出異常
            //java.util.ConcurrentModificationException
            //當方法檢測到對象的併發修改,但不允許這種修改時,拋出此異常
            //可以使用Iterator接口的子接口ListIterator來完成在迭代中對元素進行更多的操作
            Object ob = iterator.next();
            if (ob.equals("bbb")){
                list.add("ggg");
            }
        }
        System.out.println(list);
    */
    }
}
//VectorDemo
public class VectorDemo {
    public static void main(String[]args){
        Vector vector = new Vector();
        vector.addElement("aaa");
        vector.addElement("bbb");
        vector.addElement("ccc");
       Enumeration enumeration =  vector.elements();
        while (enumeration.hasMoreElements()){
            System.out.println(enumeration.nextElement());
        }
    }
}
//LinkListDemo
/**
 * 請使用LinkedList來模擬一個堆棧或者隊列數據結構
 * <p>
 * 堆棧:
 * 棧的特點:先進後出
 * <p>
 * 隊列:先進先出
 */

class DuiLie {
    private LinkedList list;

    public DuiLie() {
        list = new LinkedList();
    }

    public void add(Object o) {
        list.addLast(o);
    }

    public Object getList() {
        return list.removeFirst();
    }

    public boolean isEmpty() {
        return list.isEmpty();
    }
}

public class LinkedListTest {
    public static void main(String[] args) {
        DuiLie duiLie = new DuiLie();
        duiLie.add("aaa");
        duiLie.add("bbb");
        duiLie.add("ccc");
        duiLie.add("ddd");
        while (!duiLie.isEmpty()) {
            System.out.println(duiLie.getList());
        }
    }
}

//利用arrayList去除集合中的重複元素
public class Person {

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int hashCode() {//判斷hash值是否相同

//        System.out.println(this+"......hashcode...");
        return name.hashCode() + age;
    }
    @Override
    public boolean equals(Object obj) {//判斷內容是否相同
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Person)) {
            throw new ClassCastException("類型轉換錯誤");
        }
//        System.out.println(this + "......equals...." + obj);
        Person person = (Person) obj;
        return this.name.equals(person.name) && this.age == person.age;
    }

    @Override
    public String toString() {
        return name+":"+age;
    }
}

public class ArrayListTest {
    public static void main(String[] args){
        test();
        test2();
    }

    //存自定義對象
    //注意://arrayList判斷元素是否相同 remove(),contains(),的依據是equals()方法,
             //HashSet的依據是hashCode()和equals()方法,該元素是否有和該容器中的元素相同
             //所以對於自定義對象,一定要重寫equals()方法,
    private static void test2() {
        ArrayList arrayList = new ArrayList();
        arrayList.add(new Person("aaa", 10));
        arrayList.add(new Person("bbb", 20));
        arrayList.add(new Person("ccc", 30));
        arrayList.add(new Person("bbb", 20));
        arrayList.add(new Person("ccc", 30));

        System.out.println(arrayList);

        arrayList = singletest(arrayList);

        System.out.println(arrayList);
    }

    //存字符串
    private static void test() {
        ArrayList arrayList = new ArrayList();
        arrayList.add("aaa");
        arrayList.add("bbb");
        arrayList.add("ccc");
        arrayList.add("ccc");
        arrayList.add("ddd");
        arrayList.add("ddd");
        arrayList.add("ddd");

        System.out.println(arrayList);

        arrayList = singletest(arrayList);
        System.out.println(arrayList);
    }


    public static ArrayList singletest(ArrayList list){
        //1,定義一個集合的迭代器
        Iterator iterator = list.iterator();
        //2,創建一個新的list集合
        ArrayList arrayList1 = new ArrayList();
        //3,迭代list集合
        while (iterator.hasNext()){
            //4.定義 一個對象接收集合中的元素
            Object object = iterator.next();
            //5.判斷新集合中是否有相同的元素,如果沒有,則存進新的集合
            if (!arrayList1.contains(object)){
                arrayList1.add(object);
            }
        }
        return arrayList1;
    }
}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章