线性表顺序储存结构的实现交并集(Java)
1、创建类文件
2、package Waaa;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class SeqList<T> extends Object {
// 对象数组存储顺序表的数据元素,保护成员
protected Object[] element;
// 顺序表元素个数(长度)
protected int n;
// 构造容量为length的空表
public SeqList(int length) {
// 申请数组的存储空间,元素为null
this.element = new Object[length];
// 若length<0,则抛出长度异常
this.n = 0;
}
// 创建迷人容量的空表。构造方法重载
public SeqList() {
// 调用已经声明的指导参数列表的构造方法
this(64);
}
// 构造顺序表。由values数组提供元素
public SeqList(T[] values) {
// 创建容量为values.lenght
this(values.length);
for (int i = 0; i < values.length; i++) {
this.element[i] = values[i];
}
this.n = element.length;
}
// 判断顺序表是否为空
public boolean isEmpyt() {
return this.n == 0;
}
// 返回顺序表个数
public int size() {
return this.n;
}
// 添加
public int add(int i, T x) {
if (x == null)
throw new NullPointerException("x==null");
if (i < 0) {
i = 0;
}
if (i > this.n) {
i = this.n;
}
Object[] source = this.element;
if (this.n == element.length) {
this.element = new Object[source.length * 2];
for (int j = 0; j < i; j++)
this.element[j] = source[j];
}
for (int j = this.n - 1; j >= i; j--) {
this.element[j + 1] = source[j];
}
int flag = 0;
if (flag == 0) {
this.element[i] = x;
this.n++;
}
return i;
}
public int add(T x) {
return this.add(this.n, x);
}
// 返回第I个元素,
public T get(int i) {
if (i >= 0 && i < this.n) {
return (T) this.element[i];
}
return null;
}
// 交集
public SeqList<T> intersect(T[] arr1, T[] arr2) {
Map<T, Boolean> map = new HashMap<T, Boolean>();
SeqList<T> list = new SeqList<T>();
for (T str : arr1) {
if (!map.containsKey(str)) {
map.put(str, Boolean.FALSE);
}
}
for (T str : arr2) {
if (map.containsKey(str)) {
map.put(str, Boolean.TRUE);
}
}
for (Entry<T, Boolean> e : map.entrySet()) {
if (e.getValue().equals(Boolean.TRUE)) {
list.add(e.getKey());
// System.out.println(e.getKey());
}
}
return list;
}
// 并集
public SeqList<T> Union(T[] arr1, T[] arr2) {
SeqList<T> sList = new SeqList<T>();
Set<T> set = new HashSet<T>();
for (int i = 0; i < arr1.length; i++) {
set.add(arr1[i]);
}
for (int i = 0; i < arr2.length; i++) {
set.add(arr2[i]);
}
for (T t : set) {
sList.add(t);
}
return sList;
}
}
3、创建测试主文件
4、package Waaa;
import java.util.Scanner;
public class TestList {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入第一行个数:");
String len1 = scan.nextLine();
System.out.print("请输入第一行数据:");
String str1 = scan.nextLine();
String[] arr1 = str1.trim().split(" ");
if (arr1.length != Integer.parseInt(len1.trim())) {
System.out.println("输入数据不合法!");
return;
}
System.out.print("请输入第二行个数:");
String len2 = scan.nextLine();
System.out.print("请输入第二行数据:");
String str2 = scan.nextLine();
String[] arr2 = str2.trim().split(" ");
if (arr2.length != Integer.parseInt(len2.trim())) {
System.out.println("输入数据不合法!");
return;
}
System.out.print("请输入运算法则(Union 或 Intersection):");
String type = scan.nextLine();
// String[] arr1 = {"4","3","2","1"};
// String[] arr2 = {"5","2","6","4"};
SeqList<String> list = new SeqList<String>();
if (type.equals("Union")) {
list = list.Union(arr1, arr2);
} else if (type.equals("Intersection")) {
list = list.intersect(arr1, arr2);
}
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
}
}

