Set 集合是无序不可以重复的的、List 集合是有序可以重复的。

Java 集合:HashSet 与 hashCode、equals 博客里面已经说到这个问题,但是解释的还是不够清楚。

看一个小例子:

package mark.zhang;

import java.util.ArrayList;
import java.util.HashSet;

public class Test {

public static void main(String[] args) {
        ArrayList<Integer> loadsList = new ArrayList<Integer>();
        loadsList.add(1);
        loadsList.add(2);
        loadsList.add(0);
        loadsList.add(3);
        loadsList.add(2);
        loadsList.add(1);
        loadsList.add(3);
        loadsList.add(5);
        loadsList.add(0);
        System.out.println("the arrayList: " + loadsList);
        
        HashSet<Integer> loadsSet = new HashSet<Integer>();
        loadsSet.add(1);
        loadsSet.add(2);
        loadsSet.add(0);
        loadsSet.add(3);
        loadsSet.add(2);
        loadsSet.add(1);
        loadsSet.add(3);
        loadsSet.add(5);
        loadsSet.add(0);
        System.out.println("the hashSet:   " + loadsSet);
    }
}

代码很简单,分别使用 ArrayList、HashSet 装载 Integer 数据,然后打印集合的内容。

List 中的元素是按照 add 顺序加载的,并且里面有重复的元素。这就是有序可重复的意思。

Set 中的元素并没有按照 add 顺序加载的,并且里面没有重复的元素。这就是无序不可重复的意思。

换句话说,有序不是指按照字母顺序或者数字大小来排列的,重复是指元素之间 equals 为 true。

这里选择 Integer,因为其重写了 equals 方法。

那麽,我们思考一个问题:如何去掉 List 里面重复的元素?参考代码:

package mark.zhang;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;

public class Test {

public static void main(String[] args) {
        ArrayList<Integer> loadsList = new ArrayList<Integer>();
        loadsList.add(1);
        loadsList.add(2);
        loadsList.add(0);
        loadsList.add(3);
        loadsList.add(2);
        loadsList.add(1);
        loadsList.add(3);
        loadsList.add(5);
        loadsList.add(0);
        System.out.println("remove before--- the arrayList: " + loadsList);
        // remove the repeated element
       // rmRepeatedElement(loadsList);
        rmRepeadtedElementByOrder(loadsList);
        System.out.println("remove after--- the arrayList: " + loadsList);
        
    }

public static void rmRepeatedElement(List<Integer> list) {
        HashSet<Integer> loadsSet = new HashSet<Integer>(list);
        list.clear();
        list.addAll(loadsSet);
    }
    
    public static void rmRepeadtedElementByOrder(List<Integer> list) {
        HashSet<Integer> loadsSet = new HashSet<Integer>();
        ArrayList<Integer> loadsList = new ArrayList<Integer>();
        for(Iterator<Integer> iterator = list.iterator(); iterator.hasNext();) {
            Integer element = iterator.next();
            if(loadsSet.add(element)) {
                loadsList.add(element);
            }
        }
        
        list.clear();
        list.addAll(loadsList);
    }
    
}

Java 集合:HashSet 与 ArrayList的更多相关文章

  1. Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  2. java集合系列之ArrayList源码分析

    java集合系列之ArrayList源码分析(基于jdk1.8) ArrayList简介 ArrayList时List接口的一个非常重要的实现子类,它的底层是通过动态数组实现的,因此它具备查询速度快, ...

  3. Java集合框架之ArrayList浅析

    Java集合框架之ArrayList浅析 一.ArrayList综述: 位于java.util包下的ArrayList是java集合框架的重要成员,它就是传说中的动态数组,用MSDN中的说法,就是Ar ...

  4. java 集合 HashSet 实现随机双色球 HashSet addAll() 实现去重后合并 HashSet对象去重 复写 HashCode()方法和equals方法 ArrayList去重

    package com.swift.lianxi; import java.util.HashSet; import java.util.Random; /*训练知识点:HashSet 训练描述 双色 ...

  5. Java集合 -- HashSet 和 HashMap

    HashSet 集合 HashMap 集合 HashSet集合 1.1 Set 接口的特点 Set体系的集合: A:存入集合的顺序和取出集合的顺序不一致 B:没有索引 C:存入集合的元素没有重复 1. ...

  6. Java集合 HashSet的原理及常用方法

    目录 一. HashSet概述 二. HashSet构造 三. add方法 四. remove方法 五. 遍历 六. 合计合计 先看一下LinkedHashSet 在看一下TreeSet 七. 总结 ...

  7. Java——集合框架之ArrayList,LinkedList,迭代器Iterator

    概述--集合框架 Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection ...

  8. 【Java集合系列】---ArrayList

    开篇前言--ArrayList中的基本方法 前面的博文中,小编主要简单介绍java集合的总体架构,在接下来的博文中,小编将详细介绍里面的各个类,通过demo.对比,来对java集合类进行更加深入的理解 ...

  9. java集合系列之三(ArrayList)

    上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具体实现类进行讲解:首先,讲解List,而List中ArrayList又最为常用.因此,本章我们讲解ArrayLi ...

  10. java集合框架03——ArrayList和源码分析

    最近忙着替公司招人好久没写了,荒废了不好意思. 上一章学习了Collection的架构,并阅读了部分源码,这一章开始,我们将对Collection的具体实现进行详细学习.首先学习List.而Array ...

随机推荐

  1. 一个极简的守护进程Bash脚本

    由于最近写的Node.js程序因为一些Bug,会出现一些自动退出的问题,所以需要在它退出的时候及时发现,并重新启动 于是查阅了些资料,写了一个Bash的程序,功能十分简单,就是每隔3s判断一次处在60 ...

  2. [译]Java垃圾回收是如何工作的

    说明:这篇文章来翻译来自于Javapapers 的How Java Garbage Collection Works 这部分教程是为了理解Java垃圾回收的基础以及它是如何工作的.这是垃圾回收系列教程 ...

  3. Libgdx Box2D现实---这缓释微丸(两:Box2D介绍)

     Box2D官方网站 : http://box2d.org/ Box2D v2.1.0用户手冊翻译 : http://blog.csdn.net/complex_ok/article/catego ...

  4. [Dev Blog] KCV插件 —— Provissy Tools 。

    承蒙各位支持! 正式版已推出,请前往http://tieba.baidu.com/p/3398574166 或者前往:http://provissy.com/?p=7 请不要在这里回复,我无法保证回复 ...

  5. javascript 10进制和64进制的转换

    原文:javascript 10进制和64进制的转换 function string10to64(number) { var chars = '0123456789abcdefghigklmnopqr ...

  6. WebIM(5)----将WebIM嵌入到页面中

    在之前的文章中,已经开发了一个简单的WebIM,但是这个WebIM是在独立的页面中的,今天发布的WebIM是一个可以嵌入到自己网页中的版本,你只需添加少量的代码,就可以在页面中嵌入一个WebIM.不过 ...

  7. 领域模型(Domain Model)

    领域模型(Domain Model) 一:面向对象设计中最简单的部分与最难的部分 如果说事务脚本是 面向过程 的,那么领域模型就是 面向对象 的.面向对象的一个很重要的点就是:“把事情交给最适合的类去 ...

  8. 配置serv-u access数据库遇到的一些问题

    配置好access数据库后,需要建个web页面来供用户修改密码,但修改时,提示:odbc被占用无法打开. serv-u一直在保持打开access数据库.我们需要将数据库设置默认打开方式为共享,不锁定. ...

  9. Date与SimpleDateFormat

    Date常用的方法 返回类型 方法名称 备注 Date New Date() 创建当前日期对象 Date New date(long dt) 使用自1970.1.1以后的指定毫秒数创建日期 boole ...

  10. 事件处理(Event Handlers) ng-click操作

    事件处理(Event Handlers) ng-click操作 step 10 本文主要通过介绍ng-click方法来对angularjs中的事件处理方法做个了解. 1.切换目录 git checko ...