Java集合

集合

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

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

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

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

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类型

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
        }
    }
}

获取迭代器

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

集合转为数组

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));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_59138290

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值