複製鏈接
請複製以下鏈接發送給好友

集合

(計算機科學術語)

鎖定
計算機科學中,集合是一組可變數量的數據項(也可能是0個)的組合,這些數據項可能共享某些特徵,需要以某種操作方式一起進行操作。一般來講,這些數據項的類型是相同的,或基類相同(若使用的語言支持繼承)。列表(或數組)通常不被認為是集合,因為其大小固定,但事實上它常常在實現中作為某些形式的集合使用。集合的種類包括列表多重集,樹和圖。枚舉類型可以是列表或集。
中文名
集合
外文名
set
領    域
計算機
釋    義
一組可變數量的數據項的組合
包    括
列表多重集

集合列表

在列表中,數據項的順序是確定的,也可以存在多個相同的數據項。列表支持的操作包括查找項目並找到其位置(若存在),將項目從列表中刪除,在特定位置插入項目等。通常的隊列,或稱FIFO即是一個列表,該列表只能在一端添加項目,而在另一端刪除項目。而棧,或LIFO則只能在同一端添加或刪除項目。不管是隊列還是棧,集合中項目的順序都應當是一定的,因此這兩種情況只是列表的特例。其它列表支持的操作包括排序,再一次説明了其中順序的重要性。
列表的具體形式包括數組鏈表等。
Java語言中實現類
List接口的實現類
List接口的實現類:ArrayList(數組列表)、LinkedList(鏈式列表)、Vector(向量)、Stack(棧)
ArrayList:底層數據結構是數組,查詢快,增刪慢,線程不安全,效率高,可以存儲重複元素
LinkedList:底層數據結構是鏈表,查詢慢,增刪快,線程不安全,效率高,可以存儲重複元素
Vector:底層數據結構是數組,查詢快,增刪慢,線程安全,效率低,可以存儲重複元素
Stack:是Vector類的實現類
Java語言中實現類操作方法
List接口的操作方法
public class ArrayListDemo {
    public static void main(String[] args) {
        // 創建集合arrList,並向arrList中添加元素 1.414 1.732 2.236 2.449 2.718 3.14 
        ArrayList<Double> arrList = new ArrayList<Double>();
        arrList.add(1.414);
        arrList.add(1.732);
        arrList.add(2.236);
        arrList.add(2.449);
        arrList.add(2.718);
        arrList.add(3.14);
        
        System.out.print("原集合arrList中的元素:");
        for (int i=0; i<arrList.size();i++) {
            System.out.print(arrList.get(i)+" ");
        }
        //刪除原集合arrList中的一些元素
        arrList.remove(3.14);
        //根據索引設置修改原集合arrList中的相關值
        arrList.set(4, 1.414);
        
        //使用迭代器循環遍歷現集合arrList集合
        System.out.print("\n現集合arrList中的元素:");
        Iterator<Double> it = arrList.iterator();
        while (it.hasNext()) {//判斷是否有下一個元素
                 System.out.print(it.next()+"、");//獲得下一個元素及其名稱
        }
        //查詢現集合arrList中的相關
        if(arrList.contains(1.414)){
            System.out.println("\n現集合arrList中有此值");
        }else{
            System.out.println("\n現集合arrList中無此值");
        }
    }
}

集合

與列表不同,在中,數據項無序的,也不允許存在相同數據項。集支持添加、刪除和查找項目。一些語言內建對集的支持,而在其它語言中,可以利用散列表實現集。

集合多重集

多重集的行為類似於集,其中數據項無序的。但在多重集中,可以存在相同的數據項。多重集支持的操作包括添加、刪除項,查詢相同項在多重集中出現的次數。多重集可以通過排序轉換成列表。

集合關聯數組

關聯數組(或稱查找表,字典等)的行為和字典相似,為鍵(例如字典中的單詞)輸入提供一個值(如字典中的定義)輸出。值可以是對複雜數據結構的引用。通常使用散列表實現高效率的關聯數組。

集合

title title
中,“根”節點與一定數量的數據項以親-子關係聯繫起來,而其子數據項也與另外的數據項以同樣的方式聯繫。除了根節點的每個項都有且只有一個父節點,並可能有一些子節點。樹支持的操作包括遍歷,插入等。用於排序操作的樹通常稱為堆。通常使用樹來保存存在包含親-子關係的數據,例如菜單,目錄及其中文件等。
public class TreeMapDemo {
    public static void main(String[] args) {
        Map<String, Character> treeMap = new TreeMap<String, Character>();
        // 向創建集合哈希表對象添加元素"I" "love" "learning" "the" "Java" "language" "!"
        treeMap.put("01", 'J');
        treeMap.put("02", 'a');
        treeMap.put("03", 'v');
        treeMap.put("04", 'a');
        treeMap.put("05", 'L');
        treeMap.put("06", 'a');
        treeMap.put("07", 'n');
        treeMap.put("08", 'g');
        treeMap.put("09", 'u');
        treeMap.put("10", 'a');
        treeMap.put("11", 'g');
        treeMap.put("12", 'e');
        //使用第三種:通過entrySet()方法調用iterator()方法遍歷哈希表treeMap中的一些元素
        System.out.println("通過entrySet()方法遍歷哈希表treeMap中的key和value:");
        System.out.print("treeMapKey= " );
        Iterator<Entry<String, Character>> it1 = treeMap.entrySet().iterator();
        while (it1.hasNext()) {
           Entry<String, Character> entry1 = it1.next();
           System.out.print( entry1.getKey()+" ");
         }
        System.out.print("treeMapValue= " );
        Iterator<Entry<String, Character>> it2 = treeMap.entrySet().iterator();
        while (it2.hasNext()) {
             Entry<String, Character> entry2 = it2.next();
             System.out.print(entry2.getValue());
          }
        
        //刪除哈希表treeMap中的一些元素
        treeMap.remove("01");
        treeMap.remove("02");
        treeMap.remove("03");
        treeMap.remove("04");
        //第四種
        System.out.println("\n通過values()方法遍歷哈希表treeMap所有的value,但不能遍歷key");
        System.out.print("treeMapValue= ");
        for (Character value : treeMap.values()) {
           System.out.print(value);
        }
    }
}

集合

在圖中,每個數據項都可以與一個或多個其它數據項聯繫起來,其中每個節點都是平等的,類似於無根節點、無親-子關係的樹。圖支持的操作包括遍歷,查找等。圖常常用於對實際問題進行建模,並解決這些問題。在生成樹協議中,建立一張代表網絡結構的圖(或稱網格),從而瞭解應當斷開哪些鏈路以避免數據迴圈。

集合抽象概念

title title
如上所述,集合,以及集合的各種分類都只是抽象概念。由於名字相同或相似,集合及其在各種語言中的實現常常會造成文字上的混淆。集合,列表,集,樹等名字究竟是數據結構,抽象數據類型抑或類只能通過具體分析來確定。其中,集合則是計算問題的解決方案中抽象程度最高的概念。從這個方面來看,若過於關注其實現,則可能會對理解集合的數學概念產生反作用。