• Java集合


    集合

    在Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合。

    就是提供一个容器用于存储数据,增加相对应的增删改查的方法,进行整体的封装->类
    集合的目的就是为了管理元素(增删改查)
    只不过对于容器而言,它不一定都是数组(链表、树、哈希表)

    Java的数组可以看作是一种集合:

    String[] s = new String[10]; // 可以持有10个String对象
    s[0] = "Hello"; // 可以放入String对象
    String first = s[0]; // 可以获取String对象
    
    • 1
    • 2
    • 3

    Java提供了数组这种数据类型,可以充当集合,那么,我们为什么还需要其他集合类?这是因为数组有如下限制:

    • 数组初始化后大小不可变;
    • 数组只能按索引顺序存取。

    因此,我们需要各种不同类型的集合类来处理不同的数据,例如:

    • 可变大小的顺序链表;
    • 保证无重复元素的集合;

    Collection

    Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 SetList)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

    Java标准库自带的java.util包提供了集合类:Collection,它是除Map外所有其他集合类的根接口。Java的java.util包主要提供了以下三种类型的集合:

    • List:一种有序列表的集合,例如,按索引排列的StudentList
    • Set:一种保证没有重复元素的集合,例如,所有无重复名称的StudentSet
    • Map:一种通过键值(key-value)查找的映射表集合,例如,根据Studentname查找对应StudentMap

    Java集合的设计有几个特点:

    一是实现了接口和实现类相分离,例如,有序表的接口是List,具体的实现类有ArrayListLinkedList等,二是支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素,

    List<String> list = new ArrayList<>(); // 只能放入String类型
    
    • 1

    Java访问集合总是通过统一的方式——迭代器(Iterator)来实现,它最明显的好处在于无需知道集合内部元素是按什么方式存储的。

    Iterable:

    可迭代的,实现该接口的子类,都可以进行内部元素的遍历,并且可以被foreach循环使用
    上述容器,有可能是数组、链表、树、哈希表,但是不是每个结构都可以用角标来进行元素的访问的!
    所以每一个结构的内部,都要去实现一个迭代器,由迭代器来实现该结构所有元素的遍历问题

    方法摘要:

    booleanadd 确保此 collection 包含指定的元素(可选操作)。
    booleanaddAll 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
    voidclear 移除此 collection 中的所有元素(可选操作)。
    booleancontains 如果此 collection 包含指定的元素,则返回 true
    booleancontainsAll 如果此 collection 包含指定 collection 中的所有元素,则返回 true
    booleanequals 比较此 collection 与指定对象是否相等。
    inthashCode 的哈希码值。
    booleanisEmpty 如果此 collection 不包含元素,则返回 true
    Iteratoriterator 返回在此 collection 的元素上进行迭代的迭代器。
    booleanremove 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
    booleanremoveAll 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
    booleanretainAll 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
    intsize 返回此 collection 中的元素数。
    Object[]toArray 返回包含此 collection 中所有元素的数组。
    T[]toArray 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
    public class CollectionDemo01 {
        public static void main(String[] args) {
            Collection<Integer> col1 = new ArrayList<>();
            for (int i = 1; i <= 10; i++) {
                col1.add(i);
            }
            System.out.println(col1);
            Collection<Integer> col2 = new HashSet<>();
            col2.add(9);
            col2.add(9);
            System.out.println(col2);
            col1.addAll(col2);
            System.out.println(col1);
            
            System.out.println(col1.removeAll(col2));
            System.out.println(col1);
            System.out.println(col2);
            for (Integer num : col2) {
                System.out.println(num);    //col2[i] = num
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    获取迭代器

    Iterator<Integer> it = col2.iterator();
            while (it.hasNext()) {
                System.out.println(it.next());
            }
    
    • 1
    • 2
    • 3
    • 4

    集合转为数组

    Object[] arr = col2.toArray();
    for (int i = 0; i < arr.length; i++) {
    System.out.println((Integer) arr[i]);
    }
    Integer[] iarr = new Integer[col2.size()];
    col2.toArray(iarr); //底层会自动将元素添加进数组中
    System.out.println(Arrays.toString(iarr));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    微信开发者工具如何使用?使用注意事项
    大数据平台之数据治理
    Oracle数据库的逻辑结构
    Vxlan协议原理及基本配置——网络测试仪实操手册
    第十九章《类的加载与反射》第1节:类的加载、连接和初始化
    上海亚商投顾:沪指延续调整 两市上涨个股不足500只
    绕过函数过滤
    软件包管理—源码包管理—源码包与RPM包区别
    Redis的三种持久化策略及选取建议
    点亮你的证件照!自制背景颜色修改脚本揭秘!
  • 原文地址:https://blog.csdn.net/m0_59138290/article/details/127562295