集合学习总结

集合

1、java集合框架概述

​ 1.集合、數組都是多個數據存儲操作的結構,簡稱java容器

​ 說明:主要指的存儲是內存層面的存儲,不涉及到持久化的存儲

​ 可以分為Collection和Map兩種:

​ Collection接口:單列數據,定義了存取一組對象的方法的集合。

​ List:存儲有序、可重複的集合(ArrayList、LinkedList、Vector)

​ Set:存儲無序、不可重複的集合(HashSet、LinkedHashSet、TreeSet)

​ Map接口:雙列數據,保存具有映射關係“key-value對”的集合

​ HashMap、LinkedHashMap、TreeMap、Hashtable、Properties

2、Collection接口方法

​ 增、刪、改、查、插、長度、遍歷

添加:add(Object o)、addAll(Collection coll)

獲取有效元素的個數:int size()

清空集合:void clear()

是否空集合:boolean isEmpty()

是否包含某個元素:boolean contains(Object o)、boolean containAll(Collection c)(通過調用equals方法來挨個判斷比較)

刪除:boolean remove(Object o)、boolean removeAll(Collection coll)

取兩個集合的交際:boolean retainAll(Collection coll)

集合是否相等:boolean equals(Object o)

轉成對象數組:Object[] toArray()

獲取集合對象的哈希值:hashCode()

遍歷:iterator()(返回迭代器對象)

3、Iterator迭代器接口

3.1 概述

​ Iterator对象称为迭代器(设计模式的一种),主要用于遍歷 Collection 集合中的元素。GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。 迭代器模式,就是为容器而生。集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。

3.2 使用原理

在这里插入图片描述

​ 調用.next()方法之前必須調用.hasNext()進行檢測。若不調用,且下一條記錄無效,直接調用.next()會拋出NoSuchElementException異常。

​ 實例:

Iterator iterator = coll.iterator();
while(iterator.hasNext()){
   
    System.out.println(iterator.next());
}

3.3 Iterato接口中的remove()

​ 注意:如果還未調用next()或在上一次調用 next 方法之后已經調用了 remove 方法,再調用remove都會报IllegalStateException。

​ 實例:

Iterator iter = coll.iterator();
while(iter.hasNext()){
   
    Object obj = iter.next();
    if(obj.equals("Tom")){
   
        iter.remove();
    }
}

4、Collection子接口一:List

4.1 概述

​ 通常用List代替數組。元素有序、可重複,集合中的每個元素都有對應的順序索引。其List接口的實現類常用有:ArrayList、LinkedList、Vector。

​ List接口:

​ ArrayLis:作為List接口的主要實現類,線程不安全,效率高;底層使用Object[] elementData存儲

​ LinkedList:對於頻繁的插入、刪除操作,使用此類效率比ArrayList高;底層使用雙向鏈錶存儲

​ Vector:作為List接口的古老實現類,線程安全,效率低;底層使用Object[]存儲

4.2 List接口方法

​ 除了從Collection集合繼承的方法外,還新增了以下的方法:

void add(int index,Object ele):在index位置插入ele元素

boolean addAll(int index, Collection eles):從index位置開始將eles中的所有元素添加進來

Object get(int index):獲取指定index位置的元素

int indexOf(Object obj):返回obj在集合中首次出現的位置

int lastIndexOf(Object obj):返回obj在當前集合中末次出現的位置

Object remove(inr index):移除指定index位置的元素,並返回此元素

Object set(int index, Object ele):設置指定index位置的元素為ele

List subList(int fromIndex, int toIndex):返回fromIndex到toIndex位置的子集合

4.3 List的實現類

4.3.1 ArrayList

​ 概述:作為List接口的主要實現類,線程不安全,效率高;底層使用Object[] elementData存儲

jdk7源碼分析:

​ ArrayList list = new ArrayList();//底層創建了長度為10的Object[]數組elementData

​ list.add(123);//elementData[0] = new Integer(123);

​ …

​ list.add(11);//如果此次的添加導致底層elementData數組容量不夠,則擴容。默認情況下,擴容為原來的容量的1.5倍,同時需要將原有的數組中的數據複製到新的數組中

​ 結論:建議使用帶參的構造器:ArrayList list = new ArrayList(int capacity)

jdk8源碼分析:

​ ArrayList list = new ArrayList();//底層Object[] elementData初始化為{}。並沒有創建長度為10的數組

​ list.add(123);//第一次調用add()時,底層才創建長度10的數組,並將數據123添加到elementData* …

​ 後續跟jdk7一致

在这里插入图片描述

ArrayList帶參構造器:initialCapacity傳入列表的初始容量,當初始容量為0時,this.element = EMPTY_ELEMENTDATA; 其中jdk8中定義EMPTY_ELEMENTDATA為Ob

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
集合是离散数学中的重要概念,它是由一些互异的元素组成的整体。在实际应用中,集合的交、并、差等操作是常见的需求。下面是针对集合的运算在 C 语言中的实验总结。 1. 集合的表示:集合可以用数组、链表等数据结构来表示,其中数组是常用的一种方法。可以定义一个布尔类型的数组,数组中的每个元素表示对应下标的元素是否在集合中出现。 2. 集合的初始化:在定义集合数组后,需要对集合数组进行初始化。可以定义一个函数,将集合数组中的所有元素都设置为 false 表示不出现在集合中;也可以定义一个函数,根据用户给定的元素列表,将集合数组中对应元素设置为 true 表示出现在集合中。 3. 集合的交:集合的交可以通过遍历两个集合数组,对应位置上的元素都为 true 时,将结果集合数组中的对应位置也设置为 true。代码示例: ``` void set_intersection(bool set1[], bool set2[], bool result[]) { for (int i = 0; i < SET_SIZE; i++) { if (set1[i] && set2[i]) { result[i] = true; } else { result[i] = false; } } } ``` 4. 集合的并:集合的并可以通过遍历两个集合数组,对应位置上的元素有一个为 true 时,将结果集合数组中的对应位置也设置为 true。代码示例: ``` void set_union(bool set1[], bool set2[], bool result[]) { for (int i = 0; i < SET_SIZE; i++) { if (set1[i] || set2[i]) { result[i] = true; } else { result[i] = false; } } } ``` 5. 集合的差:集合的差可以通过遍历两个集合数组,对应位置上的元素在 set1 中为 true,而在 set2 中为 false 时,将结果集合数组中的对应位置也设置为 true。代码示例: ``` void set_difference(bool set1[], bool set2[], bool result[]) { for (int i = 0; i < SET_SIZE; i++) { if (set1[i] && !set2[i]) { result[i] = true; } else { result[i] = false; } } } ``` 6. 集合的输出:可以定义一个函数,遍历集合数组,将数组中元素为 true 的下标输出。代码示例: ``` void set_print(bool set[]) { printf("{ "); for (int i = 0; i < SET_SIZE; i++) { if (set[i]) { printf("%d ", i); } } printf("}\n"); } ``` 以上是集合的交、并、差等运算在 C 语言中实现的简单示例。希望能对你的学习有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值