Java_集合框架

集合框架概念

  • 集合框架是一個用來代表和操作集合的統(tǒng)一架構.所有的集合框架都包含以下內容:
    1.接口:是代表集合的抽象數(shù)據(jù)類型.接口允許集合獨立操縱其代表細節(jié).在面向對象語言.接口通常形成一個層次.
    2.實現(xiàn)(類):是集合接口的具體實現(xiàn).
    1. 算法:是實現(xiàn)集合接口的對象里的方法執(zhí)行的一些有用的計算.
  • 特點
    1.集合的長度是可變的.
    2.集合只用于存儲對象.
    3.集合可以存儲不同類型的對象.

Collection接口

*定義了存取一組對象的方法,其子接口Set和 List分別定義了存儲方法.
*Set中的數(shù)據(jù)對象沒有順序且不可以重復.
*List中的數(shù)據(jù)對象有順序且可以重復.

1.PNG

在上圖中 Collection是一個超級接口 Set和List繼承與它.Set和list也是接口.
hashSet是Set的實現(xiàn)類,ArrayList和LinkedList是List的實現(xiàn)類.

LIst

ArrayList的一些方法

  • ArrayList采用數(shù)組實現(xiàn),適合查找,更新
ArrayList list =  new ArrayList();
        list.add("one");
        list.add("two");
        list.add("thre");
        System.out.println(list);
        //刪除元素
        list.remove(1);//根據(jù)下標
        list.remove("thre");//根據(jù)元素
        System.out.println(list);
        //跟新
        list.set(0,"跟新元素");
        System.out.println(list);
        //查找元素
        Object obj =list.get(0);
        System.out.println(obj);
        
        //是否包含某元素
        boolean isContain = list.contains("跟新元素");
        System.out.println(isContain);
        //元素個數(shù)
        int size = list.size();
        System.out.println(size);

Lindedlist的一些方法

  • LinkedList 采用雙向鏈表實現(xiàn),適合添加,刪除.
LinkedList list = new LinkedList();
        
        list.add("one");
        list.add("two");
        list.add("thre");
        System.out.println(list);
        //刪除元素
        list.remove(1);//根據(jù)下標
        list.remove("thre");//根據(jù)元素
        System.out.println(list);
        //跟新
        list.set(0, "跟新元素");
        System.out.println(list);
        //查找元素
        Object obj =list.get(0);
        System.out.println(obj);
        
        //是否包含某元素
        boolean isContain = list.contains("跟新元素");
        System.out.println(isContain);
        //元素個數(shù)
        int size = list.size();
        System.out.println(size);

這些都是list的兩個實現(xiàn)類,上面的方法都是一些常用的方法要熟練應用.

Set

HashSet一些方法

  • 創(chuàng)建HashSet對象 (因為是無序的,所以不可以用get來獲取元素)
    *HashSet基于HastMap實現(xiàn)的,利用了鍵不能重復的特點.
  • 重復元素的判斷機制
    1.只要obj == obj1 認為 obj和obj1是相等的元素
    2.hashCode和 equals相等 就認為元素相等.
HashSet set = new HashSet();
        set.add("1");//添加元素
        set.add("2");
        set.add("1");
        System.out.println(set);
        //遍歷set
        for (Object object : set) {
            System.out.println(object);
        }
        //是否包含元素
        boolean iscon = set.contains("1");
        System.out.println(iscon);
        
        //刪除元素
        set.remove("1");

TreeSet

  • 可以排序 1.自然排序 2.自定義排序
  • TerrSet可以對數(shù)字和字符串排序 因為都實現(xiàn)了comparable接口
  • 如果在comparable接口中返回0 認為是同一元素.
public static void main(String[] args) {
        TreeSet set = new TreeSet();
//      set.add("2");
//      set.add("1");
//      set.add("4");
//      set.add("6");
//      set.add("8");
        Person1 p = new Person1();
        p.name = "nana";
        p.age = 11;
        Person1 p1 = new Person1();
        p1.name = "momo";
        p1.age = 10;
        Person1 p2 = new Person1();
        p2.name = "lala";
        p2.age = 8;
        set.add(p);
        set.add(p1);
        set.add(p2);
        System.out.println(set);
    }
}
class Person1 implements Comparable{
    String name;
    int age;
@Override  // 自定義相等的規(guī)則
    public boolean equals(Object obj) {
    // 如果類型不相等,返回false
    if (!(obj instanceof Person)) {
            return false;
        }
    // 如果名字相同, 返回true
    if (((Person)obj).name.equals(this.name)) {
        return true;
    }
        // 如果名字不相同,返回false
    return false;
    }
    
    // hashCode
    @Override    // 計算一個對象的hash值
    public int hashCode() {
        return this.name.hashCode();
    }
    @Override
    public int compareTo(Object o) {
        if (!(o instanceof Person1)) {
            Person1 p = (Person1)o;
            if (this.age >p.age) {
                return 1;
                }else if(this.age == p.age){
                return 0;
            }else {
                return -1;
            }
        }
        return 0;
    }
    @Override  //自定義輸出
    public String toString() {
        return "name:"+this.name+" age:"+age;
    }

Map接口

  • Map接口定義了存儲"鍵(key)-值(value)映射對"的方法.
  • 鍵不能重復 value可以重復.
HashMap map = new HashMap();
    //保存數(shù)據(jù)
    map.put("鍵", "值");
    map.put("鍵1", "值1");
    map.put("鍵2", "值2");
    //讀取數(shù)據(jù)
    Object obj = map.get("鍵");
    System.out.println(obj);
    
    //遍歷
    for (Object item : map.keySet()) {
        System.out.println(map.get(item));
    }
    //跟新
    map.put("鍵", "跟新的值");
    System.out.println(map);
    //刪除
    map.remove("鍵");
    System.out.println(map);
    //包含
    map.containsKey("鍵1");
    //map.containsValue("值1");
    //System.out.println(map);
    //清空
    map.clear();
    //System.out.println(map);

TreeMap

  • 根據(jù)key進行排序
public static void main(String[] args) {
        Stu stu = new Stu();
        stu.age = 12;
        stu.name = "楊少鋒";
        
        Stu stu1 = new Stu();
        stu1.age = 17;
        stu1.name = "阿墩";
        
        Stu stu2 = new Stu();
        stu2.age = 11;
        stu2.name = "eerdun";
        
        Stu stu3 = new Stu();
        stu3.age = 11;
        stu3.name = "張三";
    
        TreeMap map = new TreeMap();
        map.put("12", stu);
        map.put("2", stu1);
        map.put("15", stu2);
        map.put("3", stu3);
        System.out.println(map);
    }
}


class Stu  implements Comparable{
    @Override
    public String toString() {
        return "Stu [age=" + age + ", name=" + name + "]";
    }
    int age;
    String name;
    @Override
    public int compareTo(Object o) {
        Stu stu = (Stu)o;
        if (this.age > stu.age) {
            return 1;
        } else if (this.age == stu.age) {
            
            // 年齡一樣我們可以按照名字進行排序
            return 0;
        } else {
            return -1;
        }
    }
}



最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容