Set(): 存入Set的每个元素必须是唯一的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完
全一样的接口。Set接口不保证维护元素的次序。
HashSet: 为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()。
TreeSet: 保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。
LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查
询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现
Comparable接口并定义compareTo()方法。
- import java.util.LinkedList;
- public class TestArray01 {
- public static void main(String args[]) {
- Integer[] a1 = { 1, 2, 4, 3, 5, 7, 8 };
- Integer[] a2 = { 8, 2, 4, 7, 9 };
- LinkedList<Integer> list1 = new LinkedList<Integer>();
- LinkedList<Integer> list2 = new LinkedList<Integer>();
- // 将数组转换成list
- for (int i = 0; i < a1.length; i++) {
- list1.add(a1[i]);
- }
- // 将数组转换成list
- for (int i = 0; i < a2.length; i++) {
- list2.add(a2[i]);
- }
- int size_1 = list1.size();
- int size_2 = list2.size();
- // 根据list中长度最长的设置list要循环的长度
- if (size_1 >= size_2) {
- // 逐个比较两个list中的值是否相同
- for (int i = 0; i < list1.size(); i++) {
- Integer temp = list1.get(i);
- // 如果两个数组中有相同的值
- // 则将此值在两个list中删除
- // 注意此处不能使用remove方法
- if (list2.contains(temp)) {
- list1.set(i, null);
- int pos = list2.indexOf(temp);
- list2.set(pos, null);
- }
- }
- } else {
- // 逐个比较两个list中的值是否相同
- for (int i = 0; i < list2.size(); i++) {
- Integer temp = list1.get(i);
- // 如果两个数组中有相同的值
- // 则将此值在两个list中删除
- // 注意此处不能使用remove方法
- if (list1.contains(temp)) {
- list1.remove(temp);
- list2.remove(temp);
- }
- }
- }
- System.out.println(" 剩余的数组的信息 list1 :");
- for (int i = 0; i < list1.size(); i++) {
- System.out.println("----------------- : " + list1.get(i));
- }
- System.out.println(" 剩余的数组的信息 list2 :");
- for (int i = 0; i < list2.size(); i++) {
- System.out.println("----------------- : " + list2.get(i));
- }
- // 将删除掉重复元素的两个list合并到第三个list中
- LinkedList<Integer> list3 = new LinkedList<Integer>();
- for (int i = 0; i < list1.size(); i++) {
- if (list1.get(i) != null) {
- list3.addLast(list1.get(i));
- }
- }
- for (int i = 0; i < list2.size(); i++) {
- if (list2.get(i) != null) {
- list3.addLast(list2.get(i));
- }
- }
- for (int i = 0; i < list3.size(); i++) {
- System.out.println("-------list3---------- : " + list3.get(i));
- }
- }
- }
import java.util.LinkedList;
public class TestArray01 {
public static void main(String args[]) {
Integer[] a1 = { 1, 2, 4, 3, 5, 7, 8 };
Integer[] a2 = { 8, 2, 4, 7, 9 };
LinkedList<Integer> list1 = new LinkedList<Integer>();
LinkedList<Integer> list2 = new LinkedList<Integer>();
// 将数组转换成list
for (int i = 0; i < a1.length; i++) {
list1.add(a1[i]);
}
// 将数组转换成list
for (int i = 0; i < a2.length; i++) {
list2.add(a2[i]);
}
int size_1 = list1.size();
int size_2 = list2.size();
// 根据list中长度最长的设置list要循环的长度
if (size_1 >= size_2) {
// 逐个比较两个list中的值是否相同
for (int i = 0; i < list1.size(); i++) {
Integer temp = list1.get(i);
// 如果两个数组中有相同的值
// 则将此值在两个list中删除
// 注意此处不能使用remove方法
if (list2.contains(temp)) {
list1.set(i, null);
int pos = list2.indexOf(temp);
list2.set(pos, null);
}
}
} else {
// 逐个比较两个list中的值是否相同
for (int i = 0; i < list2.size(); i++) {
Integer temp = list1.get(i);
// 如果两个数组中有相同的值
// 则将此值在两个list中删除
// 注意此处不能使用remove方法
if (list1.contains(temp)) {
list1.remove(temp);
list2.remove(temp);
}
}
}
System.out.println(" 剩余的数组的信息 list1 :");
for (int i = 0; i < list1.size(); i++) {
System.out.println("----------------- : " + list1.get(i));
}
System.out.println(" 剩余的数组的信息 list2 :");
for (int i = 0; i < list2.size(); i++) {
System.out.println("----------------- : " + list2.get(i));
}
// 将删除掉重复元素的两个list合并到第三个list中
LinkedList<Integer> list3 = new LinkedList<Integer>();
for (int i = 0; i < list1.size(); i++) {
if (list1.get(i) != null) {
list3.addLast(list1.get(i));
}
}
for (int i = 0; i < list2.size(); i++) {
if (list2.get(i) != null) {
list3.addLast(list2.get(i));
}
}
for (int i = 0; i < list3.size(); i++) {
System.out.println("-------list3---------- : " + list3.get(i));
}
}
}
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- public class TestArray02 {
- public static void main(String args[]) {
- Integer[] a1 = { 1, 2, 3 };
- Integer[] a2 = { 4, 2, 3 };
- Map<Integer, Object> map = new HashMap<Integer, Object>();
- for (int i = 0; i < a1.length; i++) {
- // 因为我们要获取的是set集合,所以
- // 只在此处设置map的key
- map.put(a1[i], null);
- }
- for (int i = 0; i < a2.length; i++) {
- // 因为我们要获取的是set集合,所以
- // 只在此处设置map的key
- map.put(a2[i], null);
- }
- List<Integer> list = new ArrayList<Integer>();
- Iterator<Integer> it = map.keySet().iterator();// 在此处获取set的集合
- while (it.hasNext()) {
- Integer ob = (Integer) it.next();
- list.add(ob);
- }
- // 将list集合转换成Integer数组
- Integer[] a3 = (Integer[]) list.toArray(new Integer[list.size()]);
- for (int i = 0; i < a3.length; i++) {
- System.out.println(a3[i]);
- }
- }
- }
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class TestArray02 {
public static void main(String args[]) {
Integer[] a1 = { 1, 2, 3 };
Integer[] a2 = { 4, 2, 3 };
Map<Integer, Object> map = new HashMap<Integer, Object>();
for (int i = 0; i < a1.length; i++) {
// 因为我们要获取的是set集合,所以
// 只在此处设置map的key
map.put(a1[i], null);
}
for (int i = 0; i < a2.length; i++) {
// 因为我们要获取的是set集合,所以
// 只在此处设置map的key
map.put(a2[i], null);
}
List<Integer> list = new ArrayList<Integer>();
Iterator<Integer> it = map.keySet().iterator();// 在此处获取set的集合
while (it.hasNext()) {
Integer ob = (Integer) it.next();
list.add(ob);
}
// 将list集合转换成Integer数组
Integer[] a3 = (Integer[]) list.toArray(new Integer[list.size()]);
for (int i = 0; i < a3.length; i++) {
System.out.println(a3[i]);
}
}
}