你可以使用Set实现:
JAVADoc中的一些信息:
包含不同元素的集合。更正式地说,集合不包含元素e1和e2,使得e1.equals(e2),且至多一个null元素。正如其名称所暗示的那样,此接口模型化了数学集合抽象。
注意:如果将可变对象用作集合元素,则必须格外小心。如果在对象是集合中的元素时以影响等于比较的方式更改对象的值,则不指定集合的行为。该禁止的特殊情况是,集合不能包含自身作为元素。
以下是实现:
这个类对于基本操作(add、remove、contains和size)提供恒定时间性能,假设哈希函数正确地将元素分散在桶之间。遍历这个集合需要的时间与HashSet实例的大小(元素数)加上后备HashMap实例的“容量”(桶数)成比例。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或负载因子太低)。
当迭代HashSet
时,产生的元素顺序是未定义的。
Set接口的哈希表和链接列表实现,具有可预测的迭代顺序。该实现不同于HashSet的地方在于它维护了通过其所有条目的双向链表。这个链接列表定义了迭代顺序,也就是元素插入到集合中的顺序(插入顺序)。请注意,如果将元素重新插入集合,则不会影响插入顺序。(如果在调用s.contains(e)将立即返回true之前调用s.add(e),则元素e被重新插入集合s中。)
所以,上面代码的输出为...
Set<Integer> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add(3);
linkedHashSet.add(1);
linkedHashSet.add(2);
for (int i : linkedHashSet) {
System.out.println(i);
}
一定会成为...
3
1
2
这个实现提供了基本操作(添加、删除和包含)的对数时间复杂度。默认情况下,迭代返回的元素按其“自然顺序”排序,因此上面的代码...
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.add(1);
treeSet.add(2);
for (int i : treeSet) {
System.out.println(i);
}
...将会输出:
1
2
3
您也可以向 TreeSet
构造函数传递一个 Comparator
实例,以便按不同顺序对元素进行排序。
请注意,由集合(无论是否提供显式比较器)维护的排序必须与相等关系一致,如果要正确实现 Set 接口,则必须如此。(有关一致的定义,请参见 Comparable 或 Comparator。)这是因为 Set 接口是基于 equals 操作定义的,但 TreeSet 实例使用其 compareTo(或 compare)方法执行所有元素比较,因此通过此方法被视为相等的两个元素,在集合的角度来看是相等的。即使集合的排序与 equals 不一致,其行为也是明确定义的;它只是未遵守 Set 接口的一般合同。
使用new HashSet<String>
。
import java.util.HashSet;
import java.util.Set;
public class MainClass {
public static void main(String args[]) {
String[] name1 = { "Amy", "Jose", "Jeremy", "Alice", "Patrick" };
String[] name2 = { "Alan", "Amy", "Jeremy", "Helen", "Alexi" };
String[] name3 = { "Adel", "Aaron", "Amy", "James", "Alice" };
Set<String> letter = new HashSet<String>();
for (int i = 0; i < name1.length; i++)
letter.add(name1[i]);
for (int j = 0; j < name2.length; j++)
letter.add(name2[j]);
for (int k = 0; k < name3.length; k++)
letter.add(name3[k]);
System.out.println(letter.size() + " letters must be sent to: " + letter);
}
}
我不知道这有多有效,但在简单情境下对我起作用了。
List<int> uniqueNumbers = new ArrayList<>();
public void AddNumberToList(int num)
{
if(!uniqueNumbers .contains(num)) {
uniqueNumbers .add(num);
}
}
您可能想使用java.util.Set<E>
接口的一个实现类,例如java.util.HashSet<String>
集合类。
一个不包含重复元素的集合。更正式地说,集合不包含任何一对元素e1和e2,使得e1.equals(e2),并且最多只有一个null元素。正如其名称所暗示的那样,此接口模拟了数学集合抽象。