(散分,学习)突然发现一个比较好的去掉集合中重复数据的算法

本文介绍了一种使用自定义Hashtable去除数组中重复元素的方法。通过将数组中的每个元素插入Hashtable中,若插入时对应位置为空,则成功插入;若已存在元素则视为重复,最终展示不含重复元素的数据集合。
Java code
package fx.algorithm.hash.app; /** * 利用hashtable去掉重复的数据 * * @author 咖啡 * */ public class HashTableApp3 { private static int[] array = { 10, 10, 2, 3, 5, 7, 8, 2, 9, 2, 5, 6, 7 }; public static void main(String[] args) { HashTable table = new HashTable(array.length); for (int i = 0; i < array.length; i++) { table.insert(new DataItem(array[i])); } table.displayTable(); } } /** * 封装数据,可要可无 * * @author 咖啡 * */ class DataItem { private int iData; public DataItem(int ii) { this.iData = ii; } public int getkey() { return iData; } } /** * 自定义一个table * * @author 咖啡 * */ class HashTable { private DataItem[] hashArray; private int arraySize; public HashTable(int size) { arraySize = size; hashArray = new DataItem[arraySize]; } /** * 显示table */ public void displayTable() { System.out.print("Table "); for (int i = 0; i < arraySize; i++) { if (hashArray[i] != null) { System.out.print(hashArray[i].getkey() + " "); } } System.out.println(); } /** * 将值直接作为table中的下标,如果该下标存在一个数据说明有冲突,不管 */ public void insert(DataItem item) { int key = item.getkey(); if (hashArray[key] == null) { hashArray[key] = item; } } }


数据结构算法中,当处理两个集合,其中每个集合都不允许有重复元素(通常表示为无序不重复元素集),我们可以使用以下几种操作: 1. **交集** (Intersection): 交集是指两个集合中都存在的元素组成的集合。可以先将其中一个集合的所有元素添加到哈希表(如Python的set或者Java的HashSet)中,然后遍历另一个集合,对于每一个元素,检查它是否在哈希表中存在。如果存在,就将其加入结果集;最后返回这个结果集。 ```python def intersection(setA, setB): return {x for x in setA if x in setB} ``` ```java Set<Integer> intersection(Set<Integer> setA, Set<Integer> setB) { Set<Integer> result = new HashSet<>(setA); result.retainAll(setB); return result; } ``` 2. **并集** (Union): 并集是两个集合所有元素的集合,同样利用哈希表,我们可以简单地将两个集合合并在一起,去除重复项。 ```python def union(setA, setB): return setA.union(setB) ``` ```java Set<Integer> union(Set<Integer> setA, Set<Integer> setB) { return new HashSet<>(setA).addAll(setB); } ``` 3. **差集** (Difference): 差集是第一个集合中独有的元素与第二个集合的组合。在Python中,可以使用`difference()`方法;而在Java中,则需要创建一个新的集合,包含只在第一个集合中的元素。 ```python def difference(setA, setB): return setA.difference(setB) ``` ```java Set<Integer> difference(Set<Integer> setA, Set<Integer> setB) { return new HashSet<>(setA).difference(setB); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值