线性表顺序储存结构的实现交并集(Java)

2025-11-06 02:40:36

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) + " ");

                  }

         }

}

线性表顺序储存结构的实现交并集(Java)

线性表顺序储存结构的实现交并集(Java)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢