`

在Java中利用set特性删除重复的数组元素

阅读更多

  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.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]);
  }
 }
}

 

分享到:
评论
1 楼 itlangqun 2011-07-08  
分析的不错,学习了...

相关推荐

    Java中Set的深入研究

    在深入探讨Java中Set接口的实现细节之前,我们先来明确一下Set在Java中的核心概念。Set接口是Java集合框架的一部分,它代表了一个数学抽象集合,即不允许包含重复元素的集合。更正式地讲,根据其Javadoc文档,Set是...

    Java数组去重 集合List去重的常用方法总结

    在实际的开发工作中,经常会遇到需要处理数组中重复元素的问题。下面将详细介绍两种常用的数组去重方法。 ##### 方法一:For双循环法 这种方法通过两层循环来检查数组中的元素是否重复。其主要步骤如下: 1. **...

    java-leetcode面试题解哈希表第217题存在重复元素-题解.zip

    在本压缩包中,我们关注的是一个Java编程相关的学习资源,特别是一道源自LeetCode的面试题,题目编号为217,主题是检查数组中是否存在重复元素。这道题目通常出现在求职面试中,用于测试候选人在算法和数据结构方面...

    Java-list-set-map.zip_Java list

    在Java编程语言中,集合框架是处理对象组的重要工具,其中`List`、`Set`和`Map`是三大核心接口。本资料“Java list set map.zip”专注于讲解这些接口及其相关实现,帮助开发者深入理解Java集合类的使用。 首先,`...

    Java(Collection_List_Map_Set).rar_java集合类详解

    LinkedList则是一个双链表,适合于频繁进行插入和删除操作,因为这些操作在链表中通常比在数组中更快。HashSet是一个不包含重复元素的集合,它不保证元素的顺序,但提供了快速的添加和查找。 List接口扩展了...

    Java集合 练习代码

    ArrayList是Java集合框架中的一个接口实现类,基于动态数组实现,提供了按索引访问元素的高效性能。你可以通过增删改查(Add、Remove、Set、Get)等基本操作来管理ArrayList中的元素。在day20的代码中,可能会包含...

    the difference of set.rar_The Show_set

    而在Java中,Set接口下有多种实现,如HashSet、LinkedHashSet和TreeSet,它们各自有不同的特性和性能特点。 标签“the_show set”可能是指展示或演示集合的使用,这可能包括编写代码示例来说明如何使用集合进行各种...

    Java 实例 - 集合中添加不同类型元素源代码+详细指导教程.zip

    通过学习,你可以掌握如何在集合中管理不同类型的数据,以及如何利用Java的泛型来提高代码的可读性和安全性。 总的来说,这个教程是为Java初学者和开发者提供的宝贵资源,旨在帮助他们更好地理解和运用Java集合框架...

    Java基础学习25.pdf

    1. **Set接口概述**:Set接口的特性是无序(元素插入顺序不保留)和不可重复(不允许出现重复元素)。它是Java集合框架的一部分,用于存储不重复的元素集合。 2. **Map接口**:Map接口存储键值对,其核心在于键...

    set映射(视频)

    在Java编程语言中,`Set`接口是集合框架的一部分,它继承自`Collection`接口,提供了不允许重复元素的存储功能。在这个主题中,我们将深入探讨`Set`映射的概念,包括其基本原理、用途、以及如何在实际开发中运用。 ...

    数据结构和Java集合框架《Data Structures and the Java Collections Framework》

    Set接口不允许重复元素,HashSet是其典型实现,利用哈希表提供快速查找。Map接口存储键值对,HashMap则是常用的实现,它通过哈希函数实现键的快速定位。 Java集合框架还包含了一些工具类,如Collections和Arrays,...

    java中的各种集合及其遍历总结(附完整例子)

    在Java编程语言中,集合框架是其核心特性之一,它为数据存储提供了强大的支持。本文将深入探讨Java中的各种集合,包括List、Set和Map,以及如何遍历这些集合,并提供了一个集合排序的实例。 首先,让我们从List开始...

    java数据结构

    5. **集合**:Java的`java.util.Collection`接口是所有单值容器的父接口,包括Set(不允许重复元素)和List(允许重复元素)。`ArrayList`和`HashSet`分别是基于数组和哈希表实现的集合。 6. **映射(哈希表)**:...

    Java集合框架的内部揭秘:List、Set与Map的深潜之旅

    **List** 接口在Java集合框架中扮演着至关重要的角色,它是一种允许包含重复元素的有序集合。这种类型的集合非常适合需要保留元素插入顺序的应用场景。Java标准库提供了多种List实现,其中最常用的是 `ArrayList` 和...

    JAVA-集合例子

    通过阅读和运行这些示例,你可以更深入地理解Java集合框架的工作原理,以及如何在实际项目中有效地利用它们。 例如,你可能会看到如何使用ArrayList和LinkedList来演示不同类型的列表操作,如何通过HashSet和...

    java中容器是什么意思?

    在Java编程语言中,容器(Container)是一种用来存储和管理数据结构的重要概念,它提供了组织、存储和操作数据的方式。...在实际应用中,开发者应根据具体需求和场景,合理选择并利用Java集合框架提供的各种容器类型。

    Java源码分析:集合-容器.pdf

    单列集合中,Set接口的集合主要用于存储不重复的元素,而List接口的集合则可以存储重复的元素。双列集合则是指Map接口的集合,它存储的是键值对映射关系。 首先,Set集合是一个不允许重复元素的集合,它有多种实现...

    java编程基础笔记(集合)

    Java编程基础笔记主要聚焦在集合框架上,这是Java编程中不可或缺的部分。集合框架是Java提供的一组接口和类,用于存储和操作数据。它包括两种主要类型:Collection和Map。 Collection是所有单值容器的超接口,其中...

    兰州大学java实验9

    本实验将引导我们深入学习Java集合框架,这包括List、Set、Queue以及Map等接口的实现类,以及它们在实际编程中的应用。兰州大学的这个实验旨在帮助学生掌握这些核心概念,并提升对数据结构的理解。 首先,让我们...

Global site tag (gtag.js) - Google Analytics