【Java】【基礎篇】day14:集合(ArrayList,LinkedList,HashSet)

前言

本期任務:畢向東老師Java視頻教程學習筆記(共計25天)


代碼


/*
Collection定義了集合框架的共性功能。
1,添加
	add(e);
	addAll(collection);

2,刪除
	remove(e);
	removeAll(collection);
	clear();

3,判斷。
	contains(e);
	isEmpty();

4,獲取
	iterator();
	size();

5,獲取交集。
	retainAll();

6,集合變數組。
	toArray();



1,add方法的參數類型是Object。以便於接收任意類型對象。

2,集合中存儲的都是對象的引用(地址)


什麼是迭代器呢?
其實就是集合的取出元素的方式。
如同抓娃娃遊戲機中的夾子。

迭代器是取出方式,會直接訪問集合中的元素。
所以將迭代器通過內部類的形式來進行描述。
通過容器的iterator()方法獲取該內部類的對象。




*/

import java.util.*;

public class CollectionDemo {
    public static void main(String[] args) {
//        method_get();
        method_get1();
    }

    public static void method_get(){
        ArrayList a1 = new ArrayList();

        // 1.添加元素
        a1.add("java1");
        a1.add("java2");
        a1.add("java3");
        a1.add("java4");

        // 獲取迭代器,用於取出集合中的元素


        Iterator it = a1.iterator();

        // 寫法1
        while (it.hasNext()){
            System.out.println(it.next());
        }

        //寫法2
        for (; it.hasNext();)
        {
            System.out.println(it.next());
        }

    }

    public static void method_get1(){
        ArrayList a1 = new ArrayList();
        // 1.添加元素
        a1.add("java2");
        a1.add("java2");
        a1.add("java3");
        a1.add("java4");

        // 打印原集合
        System.out.println(a1);

        // 刪除元素
        a1.remove("java2");
        System.out.println(a1);
//        a1.clear();
//        System.out.println(a1);

        // 判斷元素
        System.out.println("java3是否存在:"+a1.contains("java3"));
        System.out.println("集合是否爲空:"+a1.isEmpty());

        // 獲取元素個數
        System.out.println("size:"+ a1.size());


        ArrayList a2 = new ArrayList();
        a2.add("java5");
        a2.add("java6");
        a2.add("java7");
        a2.add("java2");

        // 取交集,a1中只會保留與a12中不同的元素
        a1.retainAll(a2);
        System.out.println(a1);

        // 去交集,a1中只會保留與a12中不同的元素
        a1.removeAll(a2);
        System.out.println(a1);

    }
}

import java.util.*;

/*
去除ArrayList集合中的重複元素。

*/

public class ArrayListTest {

    public static void main(String[] args) {

        ArrayList al = new ArrayList();
        al.add("java1");
        al.add("java1");
        al.add("java2");
        al.add("java3");

        System.out.println(al);
        System.out.println(singleElements(al));

    }

    public static ArrayList singleElements(ArrayList al) {
        // 定義一個臨時容器
        ArrayList newAl = new ArrayList();

        for (Iterator it = al.iterator(); it.hasNext(); ) {
            Object obj = it.next();
            if (newAl.contains(obj)) {
                continue;
            } else {
                newAl.add(obj);
            }
        }
        return newAl;

    }

}
import java.util.*;

/*
將自定義對象作爲元素存到ArrayList集合中,並去除重複元素。

比如:存人對象。同姓名同年齡,視爲同一個人。爲重複元素。


思路:
1,對人描述,將數據封裝進人對象。
2,定義容器,將人存入。
3,取出。



List集合判斷元素是否相同,依據是元素的equals方法。



*/

class Person {
    private int age;
    private String name;

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

    // 自定義的類,需要重寫equals函數,使得對象可比較
    public boolean equals(Object obj) {
        if (!(obj instanceof Person)) {
            return false;
        }
        Person p = (Person) obj; // obj當前爲object類型,所以需要強制類型轉換
        return p.age == this.age && p.name.equals(this.name);
    }
}


public class ArrayListTest2 {

    public static void main(String[] args) {

        ArrayList al = new ArrayList();

        al.add(new Person(10, "張三"));
        al.add(new Person(10, "張三"));
        al.add(new Person(11, "李四"));
        al.add(new Person(12, "王五"));

        System.out.println(al);
        System.out.println(singleElements(al));

    }

    public static ArrayList singleElements(ArrayList al) {
        // 定義一個臨時容器
        ArrayList newAl = new ArrayList();

        for (Iterator it = al.iterator(); it.hasNext(); ) {
            Object obj = it.next();
            if (newAl.contains(obj)) {
                continue;
            } else {
                newAl.add(obj);
            }
        }
        return newAl;

    }

}
/*
使用LinkedList模擬一個堆棧或者隊列數據結構。

堆棧:先進後出  如同一個杯子。
隊列:先進先出 First in First out  FIFO 如同一個水管。



*/

import java.util.*;

// 模擬實現棧
class Stack {
    private LinkedList ll;

    Stack() {
        ll = new LinkedList();
    }

    public void myAdd(Object obj) {
        ll.addLast(obj);
    }

    public Object myGet() {
        return ll.pollLast();
    }

    public boolean isNull() {
        return ll.isEmpty();
    }

}

// 模擬實現隊列
class Queue {
    private LinkedList ll;

    Queue() {
        ll = new LinkedList();
    }

    public void myAdd(Object obj) {
        ll.addLast(obj);
    }

    public Object myGet() {
        return ll.pollFirst();
    }

    public boolean isNull() {
        return ll.isEmpty();
    }

}

public class LinkedListTest {
    public static void main(String[] args) {
//        Queue q = new Queue();
//        q.myAdd("張三");
//        q.myAdd("張三");
//        q.myAdd("李四");
//        q.myAdd("王五");
//
//        while (!(q.isNull())){
//            System.out.println(q.myGet());
//        }

        Stack s = new Stack();
        s.myAdd("張三");
        s.myAdd("張三");
        s.myAdd("李四");
        s.myAdd("王五");

        while (!(s.isNull())){
            System.out.println(s.myGet());
        }
    }
}

import java.util.*;

/*
枚舉就是Vector特有的取出方式。
發現枚舉和迭代器很像。
其實枚舉和迭代是一樣的。

因爲枚舉的名稱以及方法的名稱都過長。
所以被迭代器取代了。
枚舉鬱鬱而終了。



*/

public class VectorDemo {

    public static void main(String[] args) {
        Vector v = new Vector();

        v.add("java1");
        v.add("java2");
        v.add("java3");
        v.add("java3");

        Enumeration en = v.elements();

        while (en.hasMoreElements()) {
            System.out.println(en.nextElement());
        }

    }
}
import java.util.*;

/*
往hashSet集合中存入自定對象
姓名和年齡相同爲同一個人,重複元素。

需要重寫equals和hashCode



*/


class Person1 {
    private int age;
    private String name;

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

    // 自定義的類,需要重寫equals和hashCode函數,使得對象可比較
    public boolean equals(Object obj) {
        if (!(obj instanceof Person1)) {
            return false;
        }
        Person1 p = (Person1) obj; // obj當前爲object類型,所以需要強制類型轉換
        return p.age == this.age && p.name.equals(this.name);
    }

    public int hashCode() {
        return name.hashCode() + age * 47;

    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

}

public class HashSetTest {
    public static void main(String[] args) {
        HashSet hs = new HashSet();

        hs.add(new Person1(10, "張三"));
        hs.add(new Person1(11, "張三"));
        hs.add(new Person1(12, "李四"));
        hs.add(new Person1(13, "王五"));

        System.out.println(hs);

        for (Iterator it = hs.iterator(); it.hasNext(); ) {

            Person1 p = (Person1) it.next();
            System.out.println(p.getName() + "......" + p.getAge());
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章