集合概述

1.集合概述

  • 集合:集合是java中提供的一种容器,可以用来存储多个数据

集合和数组既然都是容器他们有什么区别?

  • 数组的长度是固定的。集合的长度是可变的

    int[] arr = new int[10]

    Student[] arr = new Student[3];

    ArrayList

  • 数组存储的是同一类型的元素可以存储基本数据类型值,而对象的类型可以不一致。再开发中一般当对象多的时候,使用集合进行存储

2.集合框架

javase提供了满足各种需求的API。了解器继承与接口的操作架构

最底层的集合

学习集合的目标:1.会使用集合存储数据,会遍历集合,掌握每种集合的特性

  • Vector集合

  • ArrayList集合

  • LinkedList集合

    -------------List接口------

    • 有序的集合(存储和去除元素顺序相同)
    • 允许存储重复的元素
    • 有索引,可以使用普通的for循环遍历
    • 继承:子类共性抽取,形成父类(接口)
  • TreeSet集合:无序的集合,存储和取出元素的顺序有可能不一致

  • HashSet集合:无序的集合,存储和取出元素的顺序有可能不一致

  • LinkedHashSet集合:有序的集合,存储和取出元素的顺序一致

    ------set接口------------

    • 不允许存储重复的元素

    • 没有索引(不能使用普通for循环遍历)

list和set的共同接口Collection接口

  • 定义的是所有单列集合中共性的方法
  • 所有的单列集合都可以使用共性的方法
  • 没有带索引的方法

集合框架的学习方式:

  • 学习顶层:学习顶层接口/抽象类中共性的方法,所有的子类都可以使用
  • 使用底层:底层不是接口就是抽象类,无法创建对象使用。需要使用底层创建对象使用

List集合

有索引,可以存储重复元素,可以保证存取顺序

ArrayList,重点

底层是数组实现的 查询快,增删慢

LinkedList 次之

底层是链表实现的,查询慢,增删快

Vector 了解

Set集合

无索引、不可以存储重复元素、存取无序

HashSet 中点

底层是哈希表+红黑树实现的,五索引、不可以存储重复元素、存取无需

LinkedHashSet 次之

底层是Hash表+链表实现的、五索引、不可以存储重复元素,可以保证存取顺序

TreeSet 了解

底层是二叉树实现。一般用于排序

Collection集合常用方法

单列集合

  • boolean add() 添加元素
  • boolean remove() 移除元素
  • boolean clear() 清空集合中的元素,但是不删除集合
  • boolean contains 判断是否包含某个元素
  • boolean isEmpty() 判断集合是否为空
  • int size() 获取集合的长度
  • Object[] toArray() 将集合转换为数组
public class test1{
    public static void main(String[] args){
        //创建顶层,使用底层 Collection为顶层,ArrayList为底层
        Collection<String> coll = new ArrayList<>();
        // boolean add方法
        coll.add("hello");
        coll.add("word");
        coll.add("heima");
        coll.add("java");    //[hello,word,heima,java]
        // boolean remove删除
        boolean result = coll.remove("hello");//[word,heima,java]
        //删除添加等方法都是boolean类型,删除或添加成功返回true,失败返回false
        // boolean clear
        coll.clear();
       	System.out.println(coll);//[]
        // boolean contain是否包含某个对象
        boolean result  = coll.contains("java")//true;
        
        
    }
}

Iterator迭代器

概述:collection集合元素通用的获取方式。再去元素之前要先判断集合中有没有元素,继续再判断,如果还有就再取出来。一直把集合中所有元素都取出来。该过程称之为迭代

  • hasNext()集合中还有没有下一个元素,有返回true,没有返回false

  • next()取出集合中的下一个元素

/**
*有两个常用方法
*hasNext
*next
*/
public class Demo01Iterator{
    Collection<String> = new ArrayList<>();
    //集合中添加元素
    coll.add("1");
    coll.add("2");
    coll.add("3");
    coll.add("4");
    coll.add("5");
    /*
    使用集合中的方法获取迭代器
    */
    Iterator<String> it = coll.iterator();
	boolean b = it.hasNext();
    String s = it.next();
}

Iterator是一个接口,我们无法直接使用

需要使用Iterator接口的实现类对象

获取实现类的方式比较特殊

迭代器的使用步骤

  • 使用集合中的芳芳iterator()获取是迭代器的实现类对象,使用Iterator接口接收(多态)
  • 使用Iterator接口中的方法hasNext判断还有没有下一个元素
  • 使用Iterator接口中的方法next取出集合中的下一个元素
### C# 集合类型概述 在 C# 中,集合是一种用于存储和管理多个数据项的数据结构。与数组相比,集合提供了更灵活和强大的功能,可以动态调整大小,并支持多种操作,如添加、删除、查找和排序等。 C# 的集合类型主要分为两类:非泛型集合和泛型集合。非泛型集合位于 `System.Collections` 命名空间中,而泛型集合则位于 `System.Collections.Generic` 命名空间中。泛型集合的优势在于类型安全性,它们允许在编译时检查类型,从而避免了运行时的类型转换错误。 #### 非泛型集合 非泛型集合主要包括以下几种类型: - **ArrayList**:这是一个动态数组,可以存储任意类型的对象。它可以自动调整大小,适用于需要频繁添加和删除元素的场景。 - **Hashtable**:这是一个键值对集合,允许通过键快速查找对应的值。它适用于需要根据键进行高效查找的场景。 - **Stack**:这是一个后进先出(LIFO)的集合,适用于需要按照顺序处理元素的场景。 - **Queue**:这是一个先进先出(FIFO)的集合,适用于需要按顺序处理元素的场景。 #### 泛型集合 泛型集合主要包括以下几种类型: - **List<T>**:这是一个动态数组,专门用于存储特定类型的元素。它可以自动调整大小,适用于需要频繁添加和删除元素的场景。 - **Dictionary<TKey, TValue>**:这是一个键值对集合,允许通过键快速查找对应的值。它适用于需要根据键进行高效查找的场景。 - **Stack<T>**:这是一个后进先出(LIFO)的集合,适用于需要按照顺序处理元素的场景。 - **Queue<T>**:这是一个先进先出(FIFO)的集合,适用于需要按顺序处理元素的场景。 #### 特殊集合 除了上述常见的集合类型外,还有一些特殊的集合类型,如 `System.Collections.Specialized` 命名空间中的 `NameValueCollection` 和 `StringCollection` 等。这些集合类型通常用于特定的场景,如处理字符串键值对或字符串集合。 #### 线程安全的集合 对于多线程环境,C# 提供了线程安全的集合类型,这些类型位于 `System.Collections.Concurrent` 命名空间中。例如: - **ConcurrentBag<T>**:这是一个线程安全的集合,适用于多个线程同时添加和删除元素的场景。 - **ConcurrentDictionary<TKey, TValue>**:这是一个线程安全的键值对集合,适用于多个线程同时访问的场景。 - **ConcurrentQueue<T>**:这是一个线程安全的先进先出(FIFO)集合,适用于多个线程同时处理元素的场景。 ### 示例代码 以下是一个使用 `List<T>` 和 `Dictionary<TKey, TValue>` 的简单示例: ```csharp using System; using System.Collections.Generic; class Program { static void Main() { // 创建一个List<int>并添加元素 List<int> numbers = new List<int>(); numbers.Add(1); numbers.Add(2); numbers.Add(3); // 输出List<int>中的元素 Console.WriteLine("List<int> elements:"); foreach (int number in numbers) { Console.WriteLine(number); } // 创建一个Dictionary<string, int>并添加键值对 Dictionary<string, int> ages = new Dictionary<string, int>(); ages.Add("Alice", 30); ages.Add("Bob", 25); // 输出Dictionary<string, int>中的键值对 Console.WriteLine("\nDictionary<string, int> elements:"); foreach (KeyValuePair<string, int> age in ages) { Console.WriteLine($"{age.Key}: {age.Value}"); } } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值