【java基础】细说集合(1)—Collection接口

前言

在上一篇中我们说了数组,这一篇我们说说集合。集合和数组的本质是一样的,都是对一组数进行操作。至于数组和集合的区别,可以查看<【java基础】数组是啥?有啥用?>,在此不再赘述。下面的思维导图是我们这一系列集合相关博客的“目录”。
在这里插入图片描述
集合是可以储存数量不确定的不同对象的容器。java的集合类主要由2个接口派生:Collection和Map。具体可参考如下。
在这里插入图片描述
Collection是Set接口、Queue接口、List接口的父接口,所以其中定义的方法,也适用于操作此3类集合。大致包括添加对象,删除对象,清空集合,判断集合为空等方法。

常用方法
//定义一个ArrayList类型的集合
Collection a=new ArrayList();

//添加元素
a.add("大美女");

//删除指定元素
a.add("大美女");
//清空集合
a.clear();

//查询集合中的元素个数
a.size();
//判断是否包含指定的字符串
a.contains("大美女");
//输出集合中的元素,输出结果:[大美女]
a
遍历集合

我们知道,遍历数组时有两个方法:for循环和foreach循环。遍历集合也有两种方法:Iterator接口和foreach循环。
Iterator是啥?Iterator是一个迭代器,用于遍历集合元素。它的优点是遍历时不用考虑集合元素的个数和类型,这样能实现访问代码和集合本身的解耦。下面我们定义一个HashSet类型的集合,来说明遍历集合的方法。

b集合,HashSet类型,其中的元素有{4,3,5,7,9}

(1)使用Lambda表达式

Lambda表达式的作用是把“一块代码”赋给一个java变量。

b.forEach(obj->System.out.println("迭代集合元素:"+obj));

(2)使用Iterator接口遍历

Iterator it=b.iterator();
while(it.hasNext()){
  //it.next()方法返回的数据类型是object,因此需要强制类型转换
  Int b=(Int)b.next();
  System.out.println(b);
}

(3)使用Lambda表达式+Iterator接口

Iterator it=b.iterator();
it.forEachRemaining(obj->System.out.println("迭代集合元素:"+obj));

(4)使用foreach循环遍历

for(Object obj:b){
  Int b=(Int)obj;
  System.out.println(b);
}
操作集合

(1)使用Predicate操作集合

c集合,HashSet类型,其中的元素有:{“红色”,“酒红色”,“粉色”,“玫瑰红色”}

使用Lambda表达式和Predicate对集合进行操作的示例如下:

//批量删除集合中符合条件的元素
c.removeIf(ele->((String)ele).length()<3);
//统计集合中包含“红色”子串的数量
calAll(c,ele->((String)ele).contains("红色"));

(2)使用Stream操作集合

//调用builder()类方法创建该Stream对应的Builder
IntStream d=IntStream.builder()
 .add(14)
 .add(13)
 .add(5)
 .add(3)
.build();

//求元素的最大值
d.max().getAsInt();
//求所有元素的总和
d.sum();
//求所有元素的总数
d.count();
//求所有元素的平均值
d.average();
//统计c集合中包含“红色”子串的数量
books.stream().filter(ele->((String)ele).contains("红色")).count();

Collections类

就像Arrays类用于操作数组,Collections类用于操作集合。下面列举几个典型应用。

e集合,ArrayList类型,其中的元素有:{3,-1,6,9}

(1)排序操作

 //将List集合元素的次序反转,输出[9,6,-1,3]
Collections.reverse(e);

//将元素按自然顺序排列,输出[-1,3,6,9]
Collections.sort(e);

//将元素按随机顺序排序,每次输出的都不确定
Collections.shuffle(e);

(2)查找、替换操作

 //输出最大元素
Collections.max(e);
//判断6在集合中出现的次数,输出1
Collections.frequency(e,-5);
//对集合进行排序
Collections.sort(e);

//将nums中的-1使用1代替
Collections.replaceAll(e,-1,1);
//排序完成后,用二分法查找3
Collections.binarySearch(nums,3);

(3)同步控制

//创建线程安全的map对象
 Map m=Collections.synchronizedMap(new HashMap());

(4)设置不可变集合

//创建包含4个元素的Set类型的不可变集合
Set set=Set.of("java ","if","else","swift");

//【方式一】-创建包含3个key-value对的map不可变集合
Map map=Map.of("语文",80,"数学",98,"英语",80);
//【方式二】
Map map2=Map.ofEntries(Map.entry("语文",80),Map.entry("数学",98),Map.entry("英语",80));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卡夫卡的熊kfk

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

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

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

打赏作者

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

抵扣说明:

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

余额充值