13.集合类

1.各类型数据存储

  • 当需要在程序中记录单个数据内容时,则声明一个变量

  • 当需要在程序中记录多个类型相同的数据内容时,则声明一个一维数组

  • ​当需要在程序中记录多个类型不同的数据内容时,则定义一个类(创建一个对象)

  • 当需要在程序中记录多个类型相同的对象时,则声明一个对象数组即可(代码如下);

  • ​当需要在程序中记录多个类型不同的对象,则声明一个集合即可,集合本质上就是容器。

package cn.itxdl.day14;

public class Student {
	private int id;
	private String name;
	private int age;
	
	
	
	public Student() {
		super();
	}
	public Student(int id, String name, int age) {
		super();
		setId(id);
		setName(name);
		setAge(age);
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		if(age>0)
			this.age = age;
		else
			System.out.println("年龄不合理!!!");
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

	
	
	
}
package cn.itxdl.day14;

import java.util.Scanner;

public class TestStudent {

	public static void main(String[] args) {
		// 1.提示用户输入学生的人数并使用变量记录
			
		System.out.println("请输入学生人数:");
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		
		
		
		Student[] arr = new Student[num];
		
		
		
		for(int i = 0;i<num;i++)
		{
			System.out.println("请输入第"+(i+1)+"个学生的信息(学号,姓名,年龄):");
			String str = sc.next();
			String[] strarr = str.split(",");
			System.out.println("拆分出来的学号是:"+strarr[0]);
			System.out.println("拆分出来的姓名是:"+strarr[1]);
			System.out.println("拆分出来的年龄是:"+strarr[2]);
			
			arr[i] = new Student(Integer.parseInt(strarr[0]),strarr[1],Integer.parseInt(strarr[2]));
				
		}
		System.out.println("----------------");
		for(int i = 0;i<arr.length;i++)
		{
			if(arr[i].getName().startsWith("zhang"))
			{
				System.out.println(arr[i]);
			}
		}
	}

}

2.数组和集合的比较

  1. 数组的特点

    数组的本质就是一段连续的存储单元。

    支持下标访问,可以实现随机访问。

    数组一旦声明,则内存空间的长度固定无法更改。

    数组中删除元素不方便,可能导致大量元素移动。

    元素类型既可以是基本数据类型,也可以是引用数据类型。

  2. 集合的特点

    存储单元可连续也可不连续。

    部分支持下标部分不支持。

    集合的长度可以动态调整。

    增删元素可以不移动大量元素。

    元素类型只能是引用数据类型,因此需要借助包装类。

3.集合的框架

在java语言中集合的顶层框架是:java.util.Collection接口和java.util.Map接口。

​ 其中Collection集合中操作元素的基本单位是:单个元素。

​ 其中Map集合中操作元素的基本单位是:单对元素。

​ 在以后的开发中很少使用Collection集合,而是使用该集合的子集合:List集合、Queue集合、Set集合。

4.Collection集合的常用方法

booleanadd(E e)
用于将参数指定的元素e放入当前集合中。
booleanaddAll(Collection<? extends E> c)
用于将参数集合c中的所有元素放入当前集合中。
booleanremove(Object o)
用于将参数指定的元素o从当前集合中删除。
booleanremoveAll(Collection<?> c)
集合c全部元素从当前集合中删除 。
voidclear()
清空当前集合中的所有元素。
booleancontains(Object o)
用于判断当前集合中是否包含参数指定的元素o。
booleancontainsAll(Collection<?> c)
用于判断当前集合中是否包含参数c中的所有元素。
booleanisEmpty()
用于判断当前集合是否为空。
intsize()
返回集合中元素个数。
booleanretainAll(Collection<?> c)
用于计算调用集合和参数集合之间的交集并保留到当前集合覆盖原有数据。
当前集合若发生改变则返回true,否则返回false。
package cn.itxdl.day14;

import java.util.ArrayList;
import java.util.Collection;

public class TestCollection {

	public static void main(String[] args) {
		Collection c1 = new ArrayList();
		
		boolean b1 = c1.add(new Integer(1));
		c1.add(new String("t"));
		c1.add(new Student(1001,"zhang",100));
		
		Collection c2 = new ArrayList();
		c2.add(new Integer(1));
		c2.add(new Integer(129));
		c2.add(new String("addsaas"));
		
		c1.add(c2);//添加单个元素(这里元素为一个集合)
		c1.addAll(c2);//添加整个集合中的元素
//		c1.add(null);
		System.out.println(b1);
		System.out.println(c1);
		
		
		
		
		boolean b2 = c1.contains(c2);
		b2 = c1.contains(new Integer(1));
		b2 = c1.contains(new String("addsaas"));
		b2 = c1.contains(new Student(1001,"zhang",100));
		b2 = c1.containsAll(c2);
		System.out.println(b2);
		
		
		
		System.out.println("-------------");
		
		c1.remove(1);
		c1.remove(1);
		int z = c1.size();
		System.out.println(c1+" "+z);
		
		
		
		System.out.println(c1);
		System.out.println(c2);
		boolean o = c1.retainAll(c2);
		System.out.println(o+" "+c1);
		
		
		c1.clear();
		System.out.println(c1);
		boolean b = c1.isEmpty();
		System.out.println(b);
		
		
		
		
		
		
		
		
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 本演示程序中,集合元素限定为数字,大小由用户输入。集合中数字顺序不限,且一旦出现重复字符或非法字符,程序能自动滤去。输出的运算结果中将不含重复数字或非法字符,且按照从小到大的顺序输出。<br>2. 演示程序以用户和计算机的对话方式执行,即在计算机上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令;相应的数据输入和运算结果显示在其后。<br>3. 程序执行的命令包括:<br>(1)构造集合1;(2)构造集合2;(3)判断某数是否为集合元素;(4)添加元素;(5)删除元素;(6)求并集(存入集合1中);(7)求交集(存入集合3中);(8)输出集合1;(9)输出集合2;(0)退出。<br>“构造集合1”和“构造集合2”时,需以整型数字形式键入集合元素。<br><br>为实现上述程序功能,以线性链表表示集合。为此,需要两个抽象数据类型:线性表和集合。<br>1. 线性表的抽象数据类型定义为:<br> ADT LinkList{<br> 数据对象:D={ | IntSet,i=1,2,…,n,n 0}<br> 数据关系:R1={< , >| , D, < ,i=2,…,n}<br> 基本操作:<br> InitList(*L)<br> 操作结果:构造一个空的线性链表L。<br> IsElement(*L,e)<br> 初始条件:线性表L已存在。<br> 操作结果:若e是L的数据元素,返回1,否则返回0。<br> Append(*L,e)<br> 初始条件:线性表已存在。<br> 操作结果:按照由大到小的顺序往线性表里插入元素e,不允许重复元素。<br> Delete(*L,e)<br> 初始条件:线性表已存在。<br> 操作结果:在L中删除元素e。<br> }ADT LinkList<br>2. 集合抽象数据类型定义为:<br> ADT LinkSet {<br> 数据对象:D={ | IntSet,i=1,2,…,n,n 0}<br> 数据关系:R1={}<br> 基本操作:<br> CreatSet(*L)<br> 初始条件:s为整型数组。<br> 操作结果:生成一个由s中数字构成的集合。<br> Union(*S1,*S2)<br> 初始条件:集合S1和S2存在。<br> 操作结果:生成一个由S1和S2的并集构成的集合,返回到S1。<br> Intersection (*S1,*S2)<br> 初始条件:集合S1和S2存在。<br> 操作结果:生成一个由S1和S2的交集构成的集合,返回到S1。<br> PrintSet (*S)<br> 初始条件:集合S已存在。<br> 操作结果:依次显示集合S中的全部元素。<br> }ADT LinkSet<br><br><br>带菜单<br>Turbo c 3.0编写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MelodyYN

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

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

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

打赏作者

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

抵扣说明:

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

余额充值