24.Collection集合
1.Collection集合
1.1数组和集合的区别【理解】
相同点
都是容器,可以存储多个数据
不同点
数组的长度是不可变的,集合的长度是可变的
数组可以存基本数据类型和引用数据类型
集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类
1.2集合类体系结构【理解】
1.3Collection 集合概述和使用【应用】
Collection集合概述
是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
JDK 不提供此接口的任何直接实现.它提供更具体的子接口(如Set和List)实现
创建Collection集合的对象
多态的方式
具体的实现类ArrayList
Collection集合常用方法
方法名 说明 boolean add(E e) 添加元素 boolean remove(Object o) 从集合中移除指定的元素 boolean removeIf(Object o) 根据条件进行移除 void clear() 清空集合中的元素 boolean contains(Object o) 判断集合中是否存在指定的元素 boolean isEmpty() 判断集合是否为空 int size() 集合的长度,也就是集合中元素的个数
1.4Collection集合的遍历【应用】
迭代器介绍
迭代器,集合的专用遍历方式
Iterator<E> iterator(): 返回此集合中元素的迭代器,通过集合对象的iterator()方法得到
Iterator中的常用方法
boolean hasNext(): 判断当前位置是否有元素可以被取出 E next(): 获取当前位置的元素,将迭代器对象移向下一个索引位置
Collection集合的遍历
package com.itheima.mycollectiondemo1; import java.util.ArrayList;
import java.util.Collection; public class MyCollectionDemo2 {
public static void main(String[] args) {
Collection<String> collection=new ArrayList<>();
//boolean add(E e) 添加元素
collection.add("aaa");
collection.add("bbb");
collection.add("ccc");
collection.add("dddd");
//System.out.println(collection); //method1(collection);
//method2(collection);
//method3(collection); //method4(collection);
//method5(collection);
method6(collection);
} public static void method6(Collection<String> collection) {
//int size() 集合的长度,也就是集合中元素的个数
int size = collection.size();
System.out.println(size);
} public static void method5(Collection<String> collection) {
//boolean isEmpty() 判断集合是否为空
collection.clear();
boolean result = collection.isEmpty();
System.out.println(result);
} public static void method4(Collection<String> collection) {
//boolean contains(Object o) 判断集合中是否存在指定的元素
boolean result1 = collection.contains("a");
System.out.println(result1);
boolean result2 = collection.contains("aaa");
System.out.println(result2);
} public static void method3(Collection<String> collection) {
//void clear() 清空集合中的元素
//就是将集合中所有的元素都删除
collection.clear();
System.out.println(collection);
} public static void method2(Collection<String> collection) {
//boolean removeIf(Object o) 根据条件进行移除
//removeIf底层会遍历集合,的到集合中的每一个元素
//s依次表示集合中的每一个元素
//就会把这每一个元素都到lambda表达式中去判断一下
//如果返回的是true,则删除
//如果返回的是false,则保留不删除 //boolean test(String t);
collection.removeIf(
(String s)->{
return s.length()==3;
}
);
System.out.println(collection);
} public static void method1(Collection<String> collection) {
//boolean remove(Object o) 从集合中移除指定的元素
//如果删除成功了,则返回true
//如果删除失败了,则返回false
boolean result1 = collection.remove("aaa");
boolean result2 = collection.remove("ddd");
System.out.println(result1);
System.out.println(result2);
System.out.println(collection);
}
}
1.4Collection集合的遍历【应用】
迭代器介绍
迭代器,集合的专用遍历方式
Iterator<E> iterator(): 返回此集合中元素的迭代器,该迭代器对象默认指向当前集合的0索引
Iterator中的常用方法
boolean hasNext(): 判断当前位置是否有元素可以被取出
E next(): 获取当前位置的元素,将迭代器对象移向下一个索引位置
Collection集合的遍历
package com.itheima.mycollectiondemo1; import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class MyCollectionDemo3 {
public static void main(String[] args) {
Collection<String> list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
//1.获取迭代器对象
//迭代器对象一旦被创建出来,默认指向集合的0索引处
Iterator<String> it = list.iterator();
// //利用迭代器里面的方法进行遍历
// //当前位置是否有元素可以被取出
// System.out.println(it.hasNext());
// //取出当前位置的元素+将迭代器往后移动一个索引的位置
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
while(it.hasNext()){
System.out.println(it.next());
}
} }
迭代器小结:
Iterator<E> iterator:创建迭代器对象,默认指向当前集合的0索引。
boolean hashNext():判断当前位置是否有元素可以被取出
E next():获取当前位置
将迭代器对象移向下一个索引位置
迭代器中删除的方法
void remove(): 删除迭代器对象当前指向的元素
练习:创建一个集合,有元素a b b c d
使用循环遍历这个集合,判断当前获取到的元素是否为b,如果是就删除
package com.itheima.mycollectiondemo1; import java.util.ArrayList;
import java.util.Iterator; public class MyCollectionDemo5 {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
Iterator<String> it=list.iterator();
while(it.hasNext()){
String s=it.next();
if("b".equals(s)){
//指向谁,删除谁
it.remove();
}
}
System.out.println(list); } }
1.5增强for循环【应用】
介绍
它是JDK5之后出现的,其内部原理是一个Iterator迭代器
实现Iterable接口的类才可以使用迭代器和增强for
简化数组和Collection集合的遍历
格式
for(集合/数组中元素的数据类型 变量名 : 集合/数组名) {
// 已经将当前遍历到的元素封装到变量中了,直接使用变量即可
}
- ArrayList<String> list=new ArrayList<>();
- //添加一些元素
- for(String s:list){
- System.out.println(i);
- }
代码
package com.itheima.mycollectiondemo1; import java.util.ArrayList; public class MyCollectionDemo6 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
//1.数据类型一定是集合或者数组中元素的类型
//2.str仅仅是一个变量名而已,在循环的过程中,依次表示集合或者数组中的每一个元素
//3.list就是要遍历的集合或者数组.
for (String str : list) {
System.out.println(str);
}
}
}
注意事项:
在增强for 中修改第三方变量的值不会影响到集合中的元素
三种循环的使用场景
如果需要操作索引,使用普通for循环
如果在遍历的过程中需要删除元素,请使用迭代器
如果仅仅想遍历,那么使用增强for
案例:Collection集合存储学生对象并遍历
需求:创建一个Collection集合存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
思路:
1.定义学生类
2.创建Collection集合对象
3.创建学生对象
4.把学生添加到集合
5.遍历集合(迭代器方式)
package com.itheima.mycollectiondemo1; import java.util.ArrayList;
import java.util.Iterator; public class MyCollectionDemo8 {
public static void main(String[] args) {
ArrayList<Student> list=new ArrayList<>();
Student s1=new Student("小皮同学",23);
Student s2=new Student("小路同学",31);
Student s3=new Student("小甲同学",33);
list.add(s1);
list.add(s2);
list.add(s3); //迭代器的方式进行遍历
Iterator<Student> it=list.iterator();
while(it.hasNext()){
Student s = it.next();
System.out.println(s);
}
System.out.println("-------------");
//增强for
for (Student student : list) {
System.out.println(student);
}
} }
2.List集合
2.1List集合的概述和特点【记忆】
List集合的概述
有序集合,这里的有序指的是存取顺序
用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素
与Set集合不同,列表通常允许重复的元素
List集合的特点
有序:存储和取出的元素顺序一致
有索引:可以通过索引操作元素
可重复:存储的元素可以重复
package com.itheima.mylistdemo1; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class MyListDemo1 {
public static void main(String[] args) {
List<String> list=new ArrayList<>(); list.add("aaa");
list.add("bbb");
list.add("ccc");
Iterator<String> it=list.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
System.out.println("================");
for (String s : list) {
System.out.println(s);
}
}
}
2.2List集合的特有方法【应用】
方法名 | 描述 |
---|---|
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元素 |
package com.itheima.mylistdemo1; import java.util.ArrayList;
import java.util.List; public class MyListDemo2 {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc"); //method1(list);
//method2(list);
//method3(list);
// E get(int index)返回指定索引处的元素
String s = list.get(0);
System.out.println(s); } public static void method3(List<String> list) {
// E set(int index,E element)修改指定索引处的元素,返回被修改的元素
//注意事项,被替换的那个元素,在集合中就不存在了
String result = list.set(0, "qqq");
System.out.println(result);
System.out.println(list);
} public static void method2(List<String> list) {
// E remove(int index)删除指定索引处的元素,返回被删除的元素
//在list集合中有两个删除方法
//第一个 删除指定元素,返回值表示当前元素是否删除成功
//第二个 删除指定索引的元素,返回值表示实际删除的元素
String s= list.remove(0);
System.out.println(s);
System.out.println(list);
} public static void method1(List<String> list) {
//void add(int index,E element)在此集合中的指定位置插入指定的元素
//原来位置上的元素会往后挪一个索引
list.add(0,"qqq");
System.out.println(list);
}
}
24.Collection集合的更多相关文章
- Java基础知识强化之集合框架笔记08:Collection集合自定义对象并遍历案例(使用迭代器)
1. Collection集合自定义对象并遍历案例(使用迭代器) (1)首先定义一个Student.java,如下: package com.himi.collectionIterator; publ ...
- ------------------java collection 集合学习 ----小白学习笔记,,有错,请指出谢谢
<!doctype html>java对象集合学习记录 figure:first-child { margin-top: -20px; } #write ol, #write ul { p ...
- 大数据之路week02 Collection 集合体系收尾(Set)
1.Set集合(理解) (1)Set集合的特点 无序,唯一. (2)HashSet集合(掌握) A: 底层数据结构是哈希表(是一个元素为链表的数组) B: 哈希表底层依赖两个方法: hashCode( ...
- 浅谈Collection集合
俗话说:一个东西,一件事都离不开三句话:"是什么,为什么,怎么办" 集合是什么: 集合简单的说一个数组集合的高级体现,用来存储数据或对象的容器: 集合为什么存在: 集合只是体现了对 ...
- Collection集合的功能及总结
Collection集合是集合顶层接口,不能实例化 功能 1.添加功能 boolean add(Object obj):添加一个元素 boolean addAll(Collection c):添加一个 ...
- JAVA collection集合之 扑克牌游戏
主要内容:这里使用collection集合,模拟香港电影中大佬们玩的扑克牌游戏. 1.游戏规则:两个玩家每人手中发两张牌,进行比较.比较每个玩家手中牌最大的点数,大小由A-2,点数大者获胜.如果点数相 ...
- Collection集合List、Set
Collection集合,用来保存一组数据的数据结构. Collection是一个接口,定义了所有集合都应该包含的特征和行为 Collection派生出了两类集合 List和Set List接口:Li ...
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
首先,我们先看一下Collection集合的基本结构: 1.Collection接口 Collection是最基本集合接口,它定义了一组允许重复的对象.Collection接口派生了两个子接口Set和 ...
- java.util.Map按照key值合并的value的Collection 集合中。
用java实现把多个map的内容合并的一个resultMap中 代码大致如下 /** * @author Shalf */ public class MapUtil { /** * 把partMa ...
随机推荐
- [React Hooks长文总结系列一]初出茅庐,状态与副作用
写在开头 React Hooks在我的上一个项目中得到了充分的使用,对于这个项目来说,我们跳过传统的类组件直接过渡到函数组件,确实是一个不小的挑战.在项目开发过程中也发现项目中的其他小伙伴(包括我自己 ...
- OMnet++ 初学者教程 第一节 入门
第1部分-入门 1.1模型 首先,让我们从一个包含两个节点的"network"开始.节点将做一些简单的事情:一个是节点将创建一个数据包,而两个节点将继续来回传递相同的数据包.我们将 ...
- Spring Security Oauth2 认证(获取token/刷新token)流程(password模式)
https://blog.csdn.net/bluuusea/article/details/80284458
- dubbo负载均衡策略和集群容错策略都有哪些?动态代理策略呢?
(1)dubbo负载均衡策略 1)random loadbalance 默认情况下,dubbo是random load balance随机调用实现负载均衡,可以对provider不同实例设置不同的权重 ...
- 【CTF】CTFHub 技能树 彩蛋 writeup
碎碎念 CTFHub:https://www.ctfhub.com/ 笔者入门CTF时时刚开始刷的是bugku的旧平台,后来才有了CTFHub. 感觉不论是网页UI设计,还是题目质量,赛事跟踪,工具软 ...
- Oracle-DG最大保护模式下,dg备库出现问题对主库有什么影响?
一.需求 疑问?Oracle最大保护模式下,dg备库出现问题,影响主库吗? 我们都知道Oracle最大保护模式的意思是oracle不允许数据丢失,1条记录都不行! 那么备库有问题? oracle主库还 ...
- C语言-内存函数的实现(二)之memmove
C语言中的内存函数有如下这些 memcpy memmove memcmp memset 下面看看memmove函数 memmove 为什么会需要memmove函数? int main() { int ...
- spring boot 通过feign调用api接口
目的:远程调用服务器api,直接上步骤: 1,添加maven依赖,这是必须的: <dependency> <groupId>org.springframework.cloud& ...
- 1026 Table Tennis
A table tennis club has N tables available to the public. The tables are numbered from 1 to N. For a ...
- CVPR2021 | 华为诺亚实验室提出Transformer in Transformer
前言: transformer用于图像方面的应用逐渐多了起来,其主要做法是将图像进行分块,形成块序列,简单地将块直接丢进transformer中.然而这样的做法忽略了块之间的内在结构信息,为此,这篇论 ...