Java 集合:HashSet 与 ArrayList
Set 集合是无序不可以重复的的、List 集合是有序可以重复的。
Java 集合:HashSet 与 hashCode、equals 博客里面已经说到这个问题,但是解释的还是不够清楚。
看一个小例子:
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 里面重复的元素?参考代码:
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的更多相关文章
- Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- java集合系列之ArrayList源码分析
java集合系列之ArrayList源码分析(基于jdk1.8) ArrayList简介 ArrayList时List接口的一个非常重要的实现子类,它的底层是通过动态数组实现的,因此它具备查询速度快, ...
- Java集合框架之ArrayList浅析
Java集合框架之ArrayList浅析 一.ArrayList综述: 位于java.util包下的ArrayList是java集合框架的重要成员,它就是传说中的动态数组,用MSDN中的说法,就是Ar ...
- java 集合 HashSet 实现随机双色球 HashSet addAll() 实现去重后合并 HashSet对象去重 复写 HashCode()方法和equals方法 ArrayList去重
package com.swift.lianxi; import java.util.HashSet; import java.util.Random; /*训练知识点:HashSet 训练描述 双色 ...
- Java集合 -- HashSet 和 HashMap
HashSet 集合 HashMap 集合 HashSet集合 1.1 Set 接口的特点 Set体系的集合: A:存入集合的顺序和取出集合的顺序不一致 B:没有索引 C:存入集合的元素没有重复 1. ...
- Java集合 HashSet的原理及常用方法
目录 一. HashSet概述 二. HashSet构造 三. add方法 四. remove方法 五. 遍历 六. 合计合计 先看一下LinkedHashSet 在看一下TreeSet 七. 总结 ...
- Java——集合框架之ArrayList,LinkedList,迭代器Iterator
概述--集合框架 Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection ...
- 【Java集合系列】---ArrayList
开篇前言--ArrayList中的基本方法 前面的博文中,小编主要简单介绍java集合的总体架构,在接下来的博文中,小编将详细介绍里面的各个类,通过demo.对比,来对java集合类进行更加深入的理解 ...
- java集合系列之三(ArrayList)
上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具体实现类进行讲解:首先,讲解List,而List中ArrayList又最为常用.因此,本章我们讲解ArrayLi ...
- java集合框架03——ArrayList和源码分析
最近忙着替公司招人好久没写了,荒废了不好意思. 上一章学习了Collection的架构,并阅读了部分源码,这一章开始,我们将对Collection的具体实现进行详细学习.首先学习List.而Array ...
随机推荐
- 一个可以直接使用的MsgBox基于form居中API
可直接复制DialogBox项目(文件夹)到需要的项目中然后直接引用和using CodeProject.Dialog 已修正原作者代码错误的地方,可直接使用,VS2010测试成功 具体可以参考案例T ...
- [翻译]如何编写GIMP插件(二)
写在前面: 本人翻译并不专业,甚至英语不好,翻译内容仅供参考.由于博主是边学边翻译,所以不能保证翻译的准确性和正确性,如果可以,请查看原版学习,本文仅作学习记录之用. <How to write ...
- 进击的Android注入术《二》
继续 在<一>里,我把基本思路描写叙述了一遍,接下为我们先从注入開始入手. 注入 分类 我们平时所说的代码注入,主要静态和动态两种方式 静态注入,针对是可运行文件,比方平时我们改动ELF, ...
- [转]Windows下搭建PHP开发环境
原文:http://www.cnblogs.com/pharen/archive/2012/02/06/2340628.html PHP集成开发环境有很多,如XAMPP.AppServ......只要 ...
- SHELL 近期学习
由于项目中很少使用到shell脚本所以.只是偶尔自学一点.慢慢积累.下面就把近段时间积累的发出来.学习. #sort sort 按首字母排序 sort -n 按数字大小 从小到大排序 sort -rn ...
- 解决设置redmineblacklog的按钮无效问题
安装了redemin+backlog后,想要设置backlog, 先用管理员登录,然后访问网页: http://localhost/settings/plugin/redmine_backlogs 发 ...
- Hadoop企业级应用
Hadoop专业解决方案之构建Hadoop企业级应用 一.大数据的挑战 大数据面对挑战是你必须重新思考构建数据分析应用的方式.传统方式的应用构建是基于数据存储在不支持大数据处理的基础之上.这主要是因为 ...
- vijos1009:扩展欧几里得算法
1009:数论 扩展欧几里得算法 其实自己对扩展欧几里得算法一直很不熟悉...应该是因为之前不太理解的缘故吧这次再次思考,回看了某位大神的推导以及某位大神的模板应该算是有所领悟了 首先根据题意:L1= ...
- C#编译器闭包机制
背景 C# 在编译器层面为我们提供了闭包机制(Java7 和 Go 也是这种思路),本文简单的做个解释. 背景知识 你必须了解:引用类型.值类型.引用.对象.值类型的值(简称值). 关于引用.对象和值 ...
- [转]gdb 调试 objc
源:http://bbs.pediy.com/showthread.php?t=159549 3. 在没有 symbols的情况下,想要下断 objc method 或者 private framew ...