List和Set:

List可以将元素维护在特定的序列中。它的特点是有序,允许重复元素出现。最常见的List的实现类是:ArrayList。

Set的特点是:无序,不保存重复元素。当尝试将重复的元素添加到Set中,它就会阻止这种重复现象。Set最常见的实现是HashSet。

ArrayList更适合顺序的访问元素,它更像一个可变长度的数组。但是想要在List中间插入或删除元素时相对会比较慢。HashSet可以很快的查询到某个元素是否在Set中,因此可以很快的实现快速查询。

遍历打印ArrayList的方法:

public void firstWayPrintList() {
for(int i=0; i<list.size();i++){
System.out.print(list.get(i) + " ");
}
System.out.print('\n');
} public void secondWayPrintList() {
for(Integer i: list){
System.out.print(i + " ");
}
System.out.print('\n');
} public void thirdWayPrintList(){
for(Iterator<Integer> iterator = list.iterator(); iterator.hasNext();){
System.out.print(iterator.next() + " ");
}
System.out.print('\n');
}

遍历打印HashSet的方法:

public void firstWayPrintSet(){
for(Integer i: set){
System.out.print(i + " ");
}
System.out.print('\n'); } public void secondWayPrintSet(){
for(Iterator<Integer> iterator = set.iterator(); iterator.hasNext();){
System.out.print(iterator.next() + " ");
}
System.out.print('\n');
}

可见遍历获得ArrayList中各个元素的方法有三种:for循环,foreach,iterator;而遍历获得HashSet元素的方法只有两种:foreach,iterator。原因就在于HashSet的无序存储的特点。HashSet采用了hash,也就是散列的方法来存储元素,每个特定的元素对应一个HashCode,这就是为什么它不能存储相同的元素。同时由于采用hash,元素的存储并没有遵循某一特定的顺序,所以不能够在for循环中通过get(i)方法来得到其中的第i个元素。

如何使Set能够有序存储?

那如果我想要一个Set它能够保持元素添加时的顺序应该如何呢?答案是使用LinkedHashSet。LinkedHashSet内部使用了链表来维护元素的顺序,同时它也具有HashSet的快速查询的特点。

如何消除List中的重复元素?

我已经有了一个List,但是我想消除里面的重复元素,快速的做法是:利用Set。

public void deleteDuplicate(){
Set<Integer> set = new HashSet<Integer>(list);
list.clear();
list.addAll(set);
for(Integer i: list){
System.out.print(i + " ");
}
}

另外两个需要注意的地方:

1.在创建一个List或是Set时,良好的代码风格是:声明一个具体类的对象(ArrayList/HashSet),将其转型为对应的接口(List/Set),然后在其余的代码中都使用这个接口。我的代码中就是这样做的,这样做的好处是:如果以后我需要改变我的实现,只需要在创建的地方进行修改。

2.使用泛型:在声明的时候在尖括号中定义类型参数(HashSet<String>),这个类型参数指定了可以被放到这个容器中的对象的类型。通过使用泛型,就可以在编译阶段防止将错误的类型的对象放到容器当中。

Java基础:Collection—List&Set的更多相关文章

  1. Java基础-Collection子接口之Set接口

    Java基础-Collection子接口之Set接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学习Collection接口时,记得Collection中可以存放重复元素,也可 ...

  2. Java基础-Collection子接口之List接口

    Java基础-Collection子接口之List接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们掌握了Collection接口的使用后,再来看看Collection接口中 ...

  3. Java基础 -- Collection和Iterator接口的实现

    Collection是描述所有序列容器(集合)共性的根接口,它可能被认为是一个“附属接口”,即因为要表示其他若干个接口的共性而出现的接口.另外,java.util.AbstractCollection ...

  4. Java基础——collection接口

    一.Collection接口的定义 public interfaceCollection<E>extends iterable<E>  从接口的定义中可以发现,此接口使用了泛型 ...

  5. Java 基础 - Collection集合通用方法及操作/ArrayList和LinkedList的差别优势 /弃用的Vector

    Collection的笔记: /**存储对象考虑使用: * 1.数组, ①一旦创建,其长度不可变!② 长度难于应对实际情况 * 2.Java集合, ①Collection集合: 1.set: 元素无序 ...

  6. java基础- Collection和map

    使用构造方法时,需要保留一个无参的构造方法 静态方法可以直接通过类名来访问,而不用创建对象. -- Java代码的执行顺序: 静态变量初始化→静态代码块→初始化静态方法→初始化实例变量→代码块→构造方 ...

  7. java 基础 --Collection(Map)

    Map是不是集合?哈哈哈 java编程思想>的第11章,第216页,正数第13行,中原文:“……其中基本的类型是LIst.Set.Queue和Map.这些对象类型也称为集合类,但由于Java类库 ...

  8. Java基础Collection集合

    1.Collection是所有集合的父类,在JDK1.5之后又加入了Iterable超级类(可以不用了解) 2.学习集合从Collection开始,所有集合都继承了他的方法 集合结构如图:

  9. java 基础 --Collection(Set)

    注意: 如果hashSet存储自定义对象,一定要重写hashCode()&&equals() 如果TreeSet存储自定义对象,让元素所属的类实现自然排序接口Comparable,并重 ...

  10. JAVA基础第四章-集合框架Collection篇

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...

随机推荐

  1. Android WindowManager 监听返回键及home键

    一.监听home键盘,Android Home键系统负责监听,捕获后系统自动处理.有时候,我们需要监听home键处理自己的逻辑,监听方法如下: /** * 监听home键广播 */ private f ...

  2. Storm的本地运行模式示例

    以word count为例,本地化运行模式(不需要安装zookeeper.storm集群),maven工程, pom.xml文件如下: <project xmlns="http://m ...

  3. UVA 10529-Dumb Bones(概率dp)

    题意: 给出放一个多米诺骨牌,向左向右倒的概率,求要放好n个骨牌,需要放置的骨牌的期望次数. 分析: 用到区间dp的思想,如果一个位置的左面右面骨牌都已放好,考虑,放中间的情况, dp[i]表示放好前 ...

  4. bjfu1250 模拟

    这题貌似是蓝桥杯的一题改了个题面. 就是模拟啦,应该有比我的更简洁的方法. 我的方法是把所有的人(蚂蚁)按位置排完序以后从左往右看,每次有一个向左走的,就会把最左边的t出,这个变成向右中,同时,从左端 ...

  5. python 常用模块

    1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称('posix', 'nt', 'os2' ...

  6. bzoj 2186 [Sdoi2008]沙拉公主的困惑(欧拉函数,逆元)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2186 [题意] 若干个询问,求1..n!中与m!互质的个数. [思路] 首先有gcd( ...

  7. 2016年CCF第七次测试 俄罗斯方块

    //2016年CCF第七次测试 俄罗斯方块 // 这道小模拟题还是不错 // 思路:处理出输入矩阵中含1格子的行数和列数 // 再判是否有一个格子碰到底部,否则整体再往下移动一步,如果有一个格子不能移 ...

  8. 百度,你家云管家能靠谱点不?替你脸红!Shame on you!

    此文已提交百度云问题反馈, 坐等答复. 笔者最近下载某24+G分卷压缩文件, 24+G啊, 足足要下将近7个小时.满心欢喜的下载完却尼玛发现解压出错, 有6个文件无法解压?wrong password ...

  9. openstack分布式安装

    一. keystone安装笔记 初次接触openstack,在尝试过单机部署以后不是很满意,就开始着手分布式部署,主要是按照openstack官网上的安装教程来的,本人安装的是目前最新的 I 版. 以 ...

  10. tomcat log

    $TOMCAT_HOME$/logs/ .out tomcat 启动后的输出日志 ,主要用于输出一些常规的东西,打印的info日志也会在这里输出. 修改tomcat生成的日志位置 在开发/测试环境,日 ...