首页 > 其他分享 >集合.Collection接口详解

集合.Collection接口详解

时间:2023-09-30 21:45:47浏览次数:37  
标签:System 接口 println add 详解 Collection 集合 new out

一、常用方法

  • boolean add(E e)
    确保此集合包含指定的元素(可选操作)
  • int size()
    返回此集合中的元素数。
  • void clear()
    从此集合中删除所有元素(可选操作)。
  • Object[ ] toArray()
    返回一个包含此集合中所有元素的数组。
  • boolean isEmpty()
    如果此集合不包含元素,则返回 true 。
import java.util.ArrayList;
import java.util.Collection;
class Customer{
	
	String name;
	int age;
	
	Customer(String name,int age){
		this.age = age;
		this.name = name;
	}
	public String toString(){
		return "Customer[name="+name+"age="+age+"]";
	}
}

public class CollectionTest01 {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//1.创建集合
		//Collection c = new Collection();  写法错误,接口不能new,需借助实现类
		Collection c = new ArrayList(); //利用多态

		//2.添加元素
		c.add(1); //自动装箱
		c.add(new Integer(100));
		Object o = new Object();
		c.add(o); //Collection集合只能单个存储元素
		
		Customer cust = new Customer("张三",20);
		c.add(cust);
		
		//3.将集合转换成Object类型数组
		Object[] objs = c.toArray();
		//遍历该数组
		for(int i=0;i<objs.length;i++){
			System.out.println(objs[i]);
		}
		
		//4.获取元素的个数
		System.out.println(c.size()); //4
		System.out.println(c.isEmpty()); //false
		
		//5.清空元素
		c.clear();
		System.out.println(c.size()); //0
		System.out.println(c.isEmpty()); //true
	}
}
  • Iterator iterator()
    返回此集合中的元素的迭代器。
    通过迭代器中方法完成集合的迭代(遍历)。

在之前的这张图中左上角部分描述过迭代器

在这里插入图片描述
注意:这种方式是所有的集合通用的便利方式。

import java.util.*;
public class CollectionTest02 {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//创建集合对象
		Collection<Comparable> c = new LinkedList<Comparable>();
		
		//添加元素
		c.add(10);
		c.add(3.14);
		c.add(true);
		
		//迭代
		//1.获取迭代对象
		Iterator<Comparable> it = c.iterator();
		System.out.println(it); //java.util.AbstractList$Itr是ArrayList集合所依赖的迭代器
		                        //java.util.LinkedList$ListItr是LinkedList集合所依赖的迭代器
		                        //Itr 、ListItr是内部类
		//迭代器是面向接口编程,it是引用,保存了内存地址,指向堆中的"迭代器对象"
		
		//2.遍历集合调用Collection内部方法
		while(it.hasNext()){
			Object element = it.next();
			System.out.println(element);
		}
		/*
		boolean b = it.hasNext(); 判断是否有更多的元素
		Object element = it.next(); 将迭代器下移一位,并且取出指向的元素
		原则:it.next()之前必须先调用it.hasNext()方法,防止出现空指针异常
		*/
		
		/*for(Iterator<Comparable> it1 = c.iterator();it.hasNext();){
			Object element1 = it.next();
			System.out.println(element1);
		}
		*/
	}
}

  • boolean contains(Object o)
    如果此集合包含指定的元素,则返回 true 。

  • boolean remove(Object o)
    从该集合中删除指定元素的单个实例(如果存在)(可选操作)。

  • 存储在集合中的元素应该去重写equals方法

import java.util.*;
public class CollectionTest03 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//创建集合
		Collection c = new ArrayList();

		//创建Integer类型的对象
		Integer i1 = new Integer(10);
		
		//添加对象
		c.add(i1);
		
		//判断集合中是否包含对象i1
		System.out.println(c.contains(i1)); //true
		
		//再创建一个Integer对象
		Integer i2 = new Integer(10);
		
		//删除
		c.remove(i2);
		System.out.println(c.size()); //0
	
		//判断集合中是否包含对象i2
		System.out.println(c.contains(i2)); //true
		//这就涉及到之前学的整型常量池,所以i1就是i2
		//并且contains方法底层调用的是equals方法
		
		//创建Manager对象
		Manager m1 = new Manager(100,"张三");
		
		//添加对象
		c.add(m1);
		
		//判断集合中是否存在对象m1
		System.out.println(c.contains(m1)); //true
		
		//再添加一个Manager对象
		Manager m2 = new Manager(100,"张三");
		
		//判断集合中是否存在对象m2
		System.out.println(c.contains(m2)); 
		
		//删除
		c.remove(m2);
		System.out.println(c.size()); //0
		
		//重写equals方法之前  
		//System.out.println(c.contains(m2)); false
		
		//重写equals方法之后  
	    //System.out.println(c.contains(m2)); true
		
	}
}
class Manager{
	
	int no;
	String name;
	
	Manager(int no,String name){
		this.no = no;
		this.name = name;
	}
	
	//重写equals方法
	public boolean equals(Object o){
		
		if(this==o) return true;
		if(o instanceof Manager){
			Manager m = (Manager)o;
			if(m.no==this.no && m.name.equals(this.name)){
				return true;
			}
		}
		return false;
	}
}

返回顶部


二、深入remove方法

1.迭代器的remove方法
2.集合本身的remove方法  
import java.util.*;
public class CollectionTest04 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//创建一个集合
		Collection c = new ArrayList();
		
		//添加元素
		c.add(1);
		c.add(2);
		c.add(3);
		
		//获取迭代器遍历
        Iterator it = c.iterator();
        while(it.hasNext()){
        	//推荐使用迭代器自身的remove方法
        	it.next();
        	//删除
        	it.remove();
        	
        	/*
             //使用集合本身的remove方法删除
             Object element = it.next();
             
             //删除
             c.remove(element);
             
             这种方式需要在每一次删除后重新获取新的迭代器
             */
        }
        System.out.println(c.size()); //0
	}
}

返回顶部


三、Collection与Collections的比较

java.util.Collections; 集合工具类
java.util.Collection; 集合接口

1.Collections 是集合工具类,用来对集合进行操作。部分方法如下

-public static <T> boolean addAll(Collection<T>c,T...elements)//往集合中添加一些元素
-public static void shuffle(List<?> list) //打乱集合顺序
-public static <T> void sort(List<T> list) //对集合进行排序,默认为升序

注意:

  • sort使用前提:被排序的集合里边存储的元素,必须实现Comparable,重写接口中的方法compareTo定义排序的规则
  • sort使用范围
    在这里插入图片描述
    适用于List,若为其他类型,需要将其强制类型转换

2.Comparable接口的排序规则:

// 自己(this)-参数:升序
public static <T>void sort(List<T> list, Comparator<? super T>):
//将集合中元素按照指定规则排序

3.Comparator和Comparable的区别

Comparable:自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较的规则compareTo方法
Comparator:相当于找一个第三方的裁判,比较两个
Comparator定义排序规则: o1-o2 升序,反之降序
import java.util.*;
public class CollectionsTest01 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//使用Collections工具完成集合的排序
		List l = new ArrayList();
		
		//添加元素
		l.add(10);
		l.add(60);
		l.add(20);
		l.add(40);
		l.add(30);
		
		//遍历
		for(int i = 0; i < l.size(); i++){
			System.out.println(l.get(i));
		}
		System.out.println("=================");
		
		//完成集合的排序
		Collections.sort(l);
		
		//遍历
		for (int i = 0; i < l.size(); i++) {
			System.out.println(l.get(i));
		}
		System.out.println("=================");
		
		//给定一个set集合
		Set s = new HashSet();
		
		//添加元素
		s.add(15);
		s.add(35);
		s.add(55);
		s.add(25);
		s.add(45);
		
		/*
		Collections.sort(s);
		Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The method sort(List<T>) in the type Collections is not applicable for the arguments (Set)
		*/
		
		//进行强制类型转换
		List lists = new ArrayList(s);
		Collections.sort(lists);
		
		//遍历
		Iterator it = lists.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
		System.out.println("=================");
		
		//将ArrayList集合转化成线程安全的
		List mylist = new ArrayList();
		Collections.synchronizedList(mylist);
	}

}

在这里插入图片描述

标签:System,接口,println,add,详解,Collection,集合,new,out
From: https://www.cnblogs.com/xhengge/p/17738265.html

相关文章

  • golang 代码实现:并发请求下游接口,下游接口限制请求参数中某数组单次最多传20个
    内容来自对chatgpt的咨询假设你有一个golang的数组,数组元素数量大于20,你需要调用下游接口,但是接口的请求参数限制了一次最多传20个,为了节省时间,你需要并发调用,完整整个数组的下游调用,请完成代码编写写法一我们将数组切分成最大20个元素的小块,并对每个块并发调用下游接口:p......
  • Git详解
    学习git之前,我们需要先明白一个概念版本控制!什么是版本控制版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。实现跨区域多人协同开发追踪和记载一个或者多个文件......
  • Redis命令详解
    1.连接redis服务命令:1.连接本地redis服务命令:redis-cli2.远程连接redis服务命令:redis-clo-hhost-pport-apassword 2.redis数据类型Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sortedset:有序集合)。string是redis最基本的类型,string类型是......
  • 接口测试
    接口测试分层自动化测试UI自动化测试:主要通过模拟用户在界面的操作完成测试Unit层自动化测试:主要验证程序代码的正确性和语法的正确性Service层测试:主要测试模块之间的调用关系的正确性接口接口全称为应用编程接口,简称为API接口的本质是程序员开发的函数或方法,是完成一定功能的代......
  • 通过python封装接口商品ID采集商品详情数据
    您可以使用Python中的requests库和json库发起HTTP请求并解析响应数据,来实现获取微店商品详情数据的操作。以下是一个简单的示例代码:importrequestsimportjsondeffetch_weidian_product_detail(product_id):#构造请求URLurl=f"https://api.vdian.com/api?param={json.dumps......
  • 抽象类和接口
    1.引言接口和抽象类是面向对象编程中的两个概念,用于实现代码的抽象和封装。2.抽象类2.1定义抽象类(AbstractClass)是用于实现部分行为的类,它不能被实例化。抽象类可以包含普通方法、抽象方法(只有方法签名,没有具体实现)和属性,但抽象类中的抽象方法必须在子类中被实现。抽象类......
  • API商品数据接口调用
    一、API商品数据接口概述API商品数据接口是一种通用的数据交互方式,它允许不同系统之间进行数据传输和交互。API商品数据接口可以使用各种不同的协议和标准来实现,例如RESTfulAPI、SOAP、XML-RPC等。其中RESTfulAPI是最常用的一种,它基于HTTP协议和JSON格式进行数据传输,具有简单易用......
  • 企微消息接口
    需求背景:希望将业务系统收到的消息推送给企微中的某个成员。大致流程:1)企微后台注册self-built应用,https://work.weixin.qq.com/进入App配置页,可以得到AgentID、Secret。在最下方可以配置TrustedIP。需要注意的是,配置TrustedIP前要配置DomainServerUrl。我的例子是在腾讯云......
  • linux cp 命令详解
    如何在Linux下拷贝一个目录呢?这好像是再简单不过的问题了。 比如要把/home/usera拷贝到/mnt/temp,首先想到的就是 cp-R/home/usera/*/mnt/temp 但是这样有一个问题,/home/usera下的隐藏文件都不会被拷贝,子目录下的隐藏文件倒是会的。 那如何才是正确的方法呢?有人说用......
  • 软件测试:功能测试-接口测试-自动化测试-性能测试-验收测试
    软件测试的主要流程一、测试主要的四个阶段1.测试计划设计阶段:产品立项之后,进行需求分析,需求评审,业务需求评级,绘制业务流程图。确定测试负责人,开始制定测试计划;2.测试准备阶段:各成员编写测试用例、先小组内评审、后会议评审,测试样机和配件,测试工具。3.测试执行阶段:......