黑马程序员_集合之Collection接口

本文深入讲解Java集合框架的基础概念,包括集合与数组的区别、集合的继承体系、List集合的特点及遍历方式等,并通过实例演示如何使用集合存储及操作自定义对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流------

1.集合的概述
集合的由来:
		我们学习的java语言是面向对象的语言, 而面向对象的语言对事物的描述都是通过对象体现的,那么为了方便的操作多个对象
  我们应该将多个对象存储起来! 那么既然要存储多个对象,我们就需要使用一个容器类型的变量进行存储! 
  那么到目前为止我们都学过那些容器呢?  
  数组 : 不能满足我们变化的需求
 字符串缓冲区 : 字符串缓冲区返回的都是字符串
  数组 ,字符串缓冲区都不能满足我们的需求那么怎么办呢? 这个时候java就给我们提供集合!
 
 
 集合和数组的区别:
 		a: 长度的区别
  			数组的长度是固定的
  			集合的长度是可变的
  		b: 存储数据类型的区别
  			数组可以存储基本数据类型,也可以存储引用数据类型(对象数组)
  			集合只能存储引用数据类型
  		c: 内容区别
  			数组只能存储同一种数据类型的元素
  			集合可以存储不同种 数据类型的元素
  
  我们都知道,集合是用来存储多个元素的,那么即使是存储多个元素,有的时候我们的需求也是不同的,比如: 排序 . 针对不同的需求
 java就给我们提供了不同的集合,而这些集合的数据结构不同.而数据结构不同不重要,重要的是你都可以帮我们存储数据,而且我们
  还可以使用这些数据,由此可见这些集合类之间就存在共性的内容,有共性的内容的内容我们因该将其向上抽取,就形成了集合的继承体系
  
  数据结构:	存储数据的方式
  Collection:	Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。
  				一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。
  				JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。
  Collection的功能概述:
  		a: 添加功能
  			boolean add(Object obj)	:			添加一个元素
  			boolean addAll(Collection c):		添加一个集合的元素
 		b: 删除功能
  			void clear():						移除此 collection 中的所有元素(可选操作)。
 			boolean remove(Object o):			删除一个元素
  			boolean removeAll(Collection c):	删除一个集合的元素,删除一个以上算是删除还是删除所有的算是删除?
  		c: 获取功能
  			Iterator iterator():		迭代器(重点)
  		d: 判断功能
  			boolean contains(Object o):			判断是否包含指定的元素
  			boolean containsAll(Collection c):	判断是否包含一个集合的元素,包含一个以上算是包含,还是包含所有的算是包含呢?
  			boolean isEmpty():					判断集合是否为空
  		e: 长度功能
  			int size():					获取集合的长度
  		f: 获取交集的功能
  			boolean retainAll(Collection c):	获取交集,获取到的交集元素去哪里了,返回的boolean类型的值表示神马意思?
  		g: 集合转数组的功能
  			Object[] toArray():
 
 注意 : 集合转数组的功能
 	 import java.util.ArrayList;
import java.util.Collection;

  //集合转数组的功能 : Object[] toArray():

Collection举例练习
public class CollectionTest {
	
	public static void main(String[] args) {
		
		// 创建集合对象
		Collection c = new ArrayList() ;
		
		// 添加元素
		c.add("hello");				
		c.add("world");
		c.add("java");
		
		// 首先将集合转换成数组,调用toArray方法
		Object[] objs = c.toArray() ;
		
		// 遍历数组
		for(int x = 0 ; x < objs.length ; x++){
			
			// 因为在Object中没有length()所以就报错了
			// System.out.println(objs[x].length());
			
			// 向下转型:多态的形式
			String s = (String)objs[x] ;
			
			// 输出
			System.out.println(s + "----" + s.length());
		}
		
	}

}

2迭代器:
迭代器:		Iterator iterator()
	Iterator遍历使用的两个方法:		
			boolean hasNext(): 判断是否存在元素
 			Object next():	获取元素,并将指针向后移动一位
 
 使用集合存储自定义对象,使用迭代器进行遍历
  
  分析:
  		a: 定义一个类	(Person)
  		b: 创建集合对象
 		c: 创建自定义对象
  		d: 向集合中添加自定义对象(元素)
 		e: 遍历
 			(1): 获取迭代器对象
 			(2): 使用迭代器遍历

练习:
 (1)使用集合存储字符串并使用迭代器进行遍历
class CollectionTest01{
 
 	public static void main(String[] args){
 	
		//创建集合对象
		Collection c = new ArrayList();
		 
		//向集合中添加元素
		 c.add("hello");
		 c.add("world");
		 c.add("java");
		 
		 //创建迭代器对象
		  Iterator it = c.iterator();
 		  
 		  //遍历
		  while(it.hasNext()){
	 		  
	 		  //向下转型
	 		  String str = (String)it.next();
	 		  
	 		  //输出
	 		  System.out.println(str);
		  }
 	}
 }
 

(2)使用集合存储自定义学生类并使用迭代器进行遍历
//创建学生类
 public class Student {
	
	private String name ;
	
	private int age ;

	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

 //测试类

public class CollectionTest02 {

	public static void main(String[] args){
	
		//创建集合对象
		Collection c = new ArrayList();
		
		//创建学生对象
		Student s1 = new Student("小强" , 24);
		Student s2 = new Student("小迪" , 21);

		//添加元素
		c.add(s1); 
		c.add(s2); 
		
		//创建迭代器对象
		Iterator it = c.iterator();
	
		//使用循环
		while(it.hasNext()){
		
			//向下转型
			Student s = (Student)it.next();
			
			//输出
			System.out.println(s.getName() + "----" + s.getAge());
		}
	}
}

3 List集合的特点以及遍历方式:
List是Collection的一个子接口, 在该接口中元素是有序(存储和取出的顺序)的,并且元素可以重复 .
 
 List集合遍历方式
 (1)使用List存储自定义对象,然后使用迭代器进行遍历
	分析:
 		(1): 自定义一个类
 		(2): 创建集合对象
 		(3): 创建自定义对象
 		(4): 把自定义对象添加到集合中
 		(5): 使用 迭代器进行遍历
 			  a: 获取迭代器
 			  b: 遍历	

 //遍历举例同上,只是创建集合对象将Collection改为List
 
 (2)List集合特有的遍历方式: 使用get方法以及size方法来完成
代码实现为:
class ListTest{
 
 	public static void main(String[] args){
 	
 		//创建List集合对象
 		List list = new ArrayList();
 		
 		//添加元素
 		list.add("hello");
 		list.add("world");
 		list.add("java");
 		
 		//遍历
 		for(int i = 0 ; i < list.size() ; i++){
 			
 			//向下转型
 			String result = (String)list.get(i);
 			
 			//输出
 			System.out.println(result);
 		}
 		
 		//使用List特有的迭代器遍历 :ListIterator
	
		// ListIterator listIterator()
		ListIterator it = list.listIterator() ;
		
		// 遍历
		while(it.hasNext()){
			System.out.println(it.next());
		}
 	}
 }
 
 

4 集合中元素的修改方法
集合中元素的修改:
 迭代器是依赖于集合存在的.	在获取迭代器的时候之前已经添加过元素了,而在遍历的时候,使用的迭代器进行遍历.
 	而往集合中添加元素的时候,使用的集合在添加元素,这时候迭代器不知道其修改了集合.
  	一句话: 迭代器在遍历集合的时候使用集合来修改元素
  	
  处理方案:
  		a:  迭代器在遍历的时候使用 迭代器修改元素
  		b:  集合自身遍历的时候,只能使用集合修改元素

5 list集合3个子类的特点
list集合3个子类的特点:
 ArrayList
	底层是靠数组实现的:	查询快, 增删慢
	线程不安全 , 效率高
Vector
	底层是靠数组实现的:	查询快, 增删慢
	线程安全 ,效率低
LinkedList
	底层是靠链表实现的:	查询慢, 增删快
	线程不安全 , 效率高

在以后的开发中到底使用哪个集合呢?
	看需求
	
	要安全吗?
		要:	Vector
		不要: LinkedList 或者 ArrayList
			查询多还是增删多呢?
				查询多:	ArrayList
				增删多:	LinkedList

如果不明白,就使用ArrayList

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
### Java 高级集合进阶教程 #### Set 接口及其子类特性 Set接口是Java集合框架中的一个重要部分,它不允许存储重复元素。这使得`Set`非常适合用于去除重复项以及表示数学上的集合理论概念。 - **HashSet**: 实现了`Set`接口,内部基于哈希表实现[^3]。其特点是查找速度非常快,因为它是无序的,并且允许null值的存在(仅限一个)。为了保证元素唯一性,在向`HashSet`中添加对象时会调用该对象的`hashCode()`和`equals()`方法来判断是否已经存在相同元素。 ```java import java.util.HashSet; public class Student { private String name; public Student(String name){ this.name = name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Student other = (Student) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } ``` - **LinkedHashSet**: 继承自`HashSet`,除了具备后者所有的性质外还保持了插入顺序不变。这意味着当你迭代这个set的时候,你会按照最初加入这些项目的次序得到它们。 - **TreeSet**: 提供了一种有序的方式去保存元素,底层采用红黑树结构实现了排序功能。可以通过自然排序(`Comparable`)或定制比较器(`Comparator`)两种方式定义元素之间的大小关系。 #### Collection 和 Map 的区别与联系 在Java中,`Collection`是一个顶层接口,代表一组单一类型的对象列表。而`Map`则用来映射键到值之间的一对一关联,即每一对键都对应着唯一的值[^4]。 对于想要深入了解高级集合特性的开发者来说: - `Collection`适用于处理单列数据; - `Map`更适合于管理具有键值对形式的数据。 了解两者间的差异有助于选择合适的数据容器以满足特定应用场景的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值