我是靠谱客的博主 忐忑荔枝,最近开发中收集的这篇文章主要介绍Java整型集合类练习(一题多解),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java整型集合类练习

定义一个整型集合类,这个类型的对象可以存储10个20-80之间的整数,即它的内部有一个整型数组存储数据。编程:
1、判断两个这个类对象s1,s2是否相等。
2、输出两个集合对象的交集。
3、输出两个集合对象的并集。
4、将一个整型数据插入到一个集合对象中。
5、从一个集合中删除某一个元素。
第一种解法:数组+for

package hello;
public class leng 
{
	int a[];
	int b[];

	leng(int []a,int []b)	//带参数的构造函数;
	{
		this.a=a;
		this.b=b;
	}
	
	void Equal(int e[],int f[]) //判断两个数组是否相等,并输出交集
	{	System.out.print("n交集为:");

		int count = 0;
		
		for(int j=0;j<10;j++)
		{
			for(int h=0;h<10;h++)
			{
				if(e[j]==f[h])
				{
					count++;//统计两个数组中相等的数的个数
					System.out.print(e[j]+" ");//把相等的元素拿出来放在交集输出来
					break;
				}
				
			}
		}
		if(count==10)//两集合元素完全相等的情况
		{
			System.out.print("nS1=S2");
		}
		else
		{
			System.out.print("nS1!=S2");
		}
	}
	//思路:先输出一个数组,再输出另一个数组中不在该数组中的元素即为并集。
	//例如:int[] a = {1,2,3};int[] b = {2,3,4};先输出1,2,3,又4在b中且不在a中,则输出4.
	void Union(int e[],int f[])//求并集的方法
	{	System.out.print("n并集为:");
		int flag=0;
		for(int i=0;i<10;i++)
		{
			System.out.print(e[i]+" ");//输出e数组的元素
		}
		//注意此循坏的for作业的范围。
		for(int j = 0;j<10;j++)
		{
			for(int h = 0;h<10;h++)
			{
				if(f[j]==e[h])
				{
					flag++;
				}
			}
			if(flag==0)
			{
				System.out.print(f[j]+" ");
			}
			else
			{
				flag=0;
			}
		}
		
	}
	
	void Insert(int a,int b[])//将整数插入到集合a中的方法
	{
		int c[];
		c = new int[11];
		for(int i=0;i<10;i++)
		{
			c[i]=b[i];
		}
		c[10]=a;
		System.out.print("n将整数"+a+"插入到集合a中后的结果为:");
		for(int j :c)//高级for循环。格式:for(要遍历的对象的元素的数据类型 变量名 : 要遍历对象的名字)
		{
			System.out.print(j+" ");
		}
	}
	
	void Del(int a,int b[])
	{	
		int c[];
		int i,j = 0;
		c=new int[9];
		
		for(i=0;i<10;i++)//找到要删除的元素的位置。
		{
			if(b[i]==a)
			{
				j=i;	
			}
			
		}
		
		for(i=0;i<j;i++)
		{
			c[i]=b[i];
		}
		for(i=j;i<c.length;i++)
		{
			c[i]=b[i+1];
		}
		
		System.out.print("n将元素"+a+"从集合a中移除后的结果为:");
		for(i=0;i<9;i++)
		{
			System.out.print(c[i]+" ");
		}	
	}



	public static void main(String[] args) {
		
				int a[]= {21,22,23,24,25,26,27,28,29,30};
				int b[]= {26,26,28,29,30,31,32,33,34,35};
				System.out.print("集合a:");
				for(int i=0;i<10;i++)
				{
					System.out.print(a[i]+" ");
				}
				System.out.print("n集合b:");
				for(int i=0;i<10;i++)
				{
					System.out.print(b[i]+" ");
				}
				leng asd=new leng (a,b);
				asd.Equal(a, b);
				asd.Union(a, b);
				asd.Insert(99,a);
				asd.Del(22,a);
				
			}
		}
#集合a:21 22 23 24 25 26 27 28 29 30 
 集合b:26 26 28 29 30 31 32 33 34 35 
 交集为:26 28 29 30 
 S1!=S2
 并集为:21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 
 将整数99插入到集合a中后的结果为:21 22 23 24 25 26 27 28 29    30 99 
 将元素22从集合a中移除后的结果为:21 23 24 25 26 27 28 29 30 

第二种解法:利用Arraylist动态数组的特性。

package hello;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class integerSet{
	Integer a[],b[];
	//定义中间变量result。
	(#)ArrayList<Integer> result = new ArrayList<Integer>();
	
	ArrayList<Integer> list1,list2;
	 integerSet(Integer[] a,Integer[] b) {
		 this.a = a;
		 this.b = b;
	     list1 = new ArrayList<Integer>(Arrays.asList(a));
	     list2 = new ArrayList<Integer>(Arrays.asList(b));
	}
	
	//判断两个集合是否相等
	void Equals() {
	String string  = list1.equals(list2)?"S1==S2":"S1!=S2";
	System.out.println(string);
	}
	
	//求交集
	void intersection() {*//ArrayList<Integer> result = new ArrayList<Integer>();
		//result = list1;
		//此方法中list1会发生改变,故在这里先将list1的内容通过for循环单个赋值给result
		(#)for( Integer i: list1)
			result.add(i);1)list1.retainAll(list2);//将list1与list2的交集赋给list1。2)System.out.println(list1);
	}
	//求并集
	void Union() {
	//从此处开始都要将list1或list2重新赋值,注意(1)处的注释。则(2)处的list1为[26, 28, 29, 30]。故接下来的所有操作都会以这个值最为基准进行运算。
	/*
	 * 有些人可能会想到先用一个中间变量暂时储存list1未做(1)处运算之前
	 * 的内容,之后在将result赋值给list1做之后的计算。例如(*)处。
	 * 可Arraylist是动态数组,数组是引用类型。只要list1与result中的一个的内容发生改变,
	 * 另一个就会随之发生改变。故这种方法不可取。故可采取在之后的方法中,让list1与list2
	 * 都回到初始值。这样就符合题意。
	 * 但也可采用中间变量的方法但不是直接赋值,而是利用for循环单个赋值。
	 * 具体见(#)处代码块(空行处结束)运行时,将(*)代替(|)的代码即可得到相同的结果
	 */
      (#)list1.clear();
      //将交集中的list1的内容清空(每次使用都要清空,否则使用的便是上一次运算的结果)
		for(Integer i:result)
	    	list1.add(i);//把list1的原始值赋给list1
	    	
	  (|)list1 = new ArrayList<Integer>(Arrays.asList(a));
	  (|)list2 = new ArrayList<Integer>(Arrays.asList(b));
		 System.out.println("S1与S2的并集为:");
		 list2.removeAll(list1);
		 list1.addAll(list2);
		 System.out.println(list1);
	}
	
	//插入一个数
		void Insert(Integer i) {
		(#)list1.clear();
			for(Integer k:result)
		    	list1.add(k);
		    	
		(|)list1 = new ArrayList<Integer>(Arrays.asList(a));
			System.out.println("将i插入到list1中的结果为:");
			list1.add(i);
			System.out.println(list1);
		}
		
		//删除
		void Del(int j) {
		(#)list1.clear();
			for(Integer k:result)
		    	list1.add(k);
		    	
		(|) list1 = new ArrayList<Integer>(Arrays.asList(a));
			System.out.println("将j从list1中删除的结果为:");
			list1.remove(new Integer(j));
            //remove(int index)传入的参数是整型,删除的是索引号为index的元素
            //remove(object obj)传入的是对象,删除的是只为obj的元素
			System.out.println(list1);
		}
		
}

public class Person {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根

		Integer[] a = { 21,22,23,24,25,26,27,28,29,30};
		Integer[] b= {26,26,28,29,30,31,32,33,34,35};
				integerSet i  = new integerSet(a,b);
				//各个方法可以不用带参数,a与b已经通过构造函数将其赋值给
				//ItegerSet中的a与b作为全局变量供各个方法使用,带上参数显多余。
				i.Equals();
				i.intersection();
				i.Union();
				i.Insert(99);
				i.Del(22);
	}
}
#
S1!=S2
S1与S2的交集为:
[26, 28, 29, 30]
S1与S2的并集为:
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
将i插入到list1中的结果为:
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 99]
将j从list1中删除的结果为:
[21, 23, 24, 25, 26, 27, 28, 29, 30]


第三种解法:Arraylist数组+for

package hello;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.omg.CosNaming.IstringHelper;
class integerSet{
	ArrayList<Integer>list = new ArrayList<Integer>();
	
	//判断两个集合是否相等
	void Equals(integerSet s) {//这里包含两个对象,自身与s。
	//注意s.list.equals处,不要写出s.equals。其中s是【自身对象】,而不是Arraylist数组。	
	String string  = s.list.equals(list)?"S1==S2":"S1!=S2";
	System.out.println(string);
	}
	
	//求交集
	void intersection(integerSet s) {
		ArrayList<Integer> result = new ArrayList<Integer>();
		System.out.println("S1与S2的交集为:");
		for (Integer i:list) {//高级for循环
			if(s.list.contains(i))//不可写出s.contains(),否则会报错。
				result.add(i);
		}
		System.out.println(result);
	}
	//求并集
	void Union(integerSet s) {
		ArrayList<Integer> result = new ArrayList<Integer>();
		System.out.println("S1与S2的并集为:");
		for(Integer i:list)
			result.add(i);
		for(Integer i:s.list) {
			if(!result.contains(i))
				result.add(i);
		}
		System.out.println(result);
	}
	
	//插入一个数
		void Insert(int n) {
			ArrayList<Integer> result = new ArrayList<Integer>();
			System.out.println("将"+n+"插入到s1中的结果为:");
			for(Integer i:list)
				result.add(i);
			result.add(n);
			System.out.println(result);
		}
		
		//删除
		void Del(Integer j) {
			
			System.out.println("将"+j+"从s1中删除的结果为:");
			list.remove(j);
			System.out.println(list);
                                              
		}
		
		
		
}


public class Person {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//不可将Integer改为int。Arraylist数组中的元素类型不能为基本数据类型。
		Integer[] a = { 21,22,23,24,25,26,27,28,29,30};
		Integer[] b= {26,26,28,29,30,31,32,33,34,35};
		ArrayList<Integer> list1,list2;
		//将Integer型数组转化为Arraylist数组
		list1 = new ArrayList<Integer>(Arrays.asList(a));
	    list2 = new ArrayList<Integer>(Arrays.asList(b));
		integerSet s1 = new integerSet();
		integerSet s2 = new integerSet();
		s1.list =list1;;
		s2.list = list2;
		s1.Equals(s2);	
		s1.intersection(s2);
		s1.Union(s2);
		s1.Insert(99);
		s1.Del(22);
	}
}
#
S1!=S2
S1与S2的交集为:
[26, 28, 29, 30]
S1与S2的并集为:
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]99插入到s1中的结果为:
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 99]22从s1中删除的结果为:
[21, 23, 24, 25, 26, 27, 28, 29, 30]


最后

以上就是忐忑荔枝为你收集整理的Java整型集合类练习(一题多解)的全部内容,希望文章能够帮你解决Java整型集合类练习(一题多解)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部