集合可以看作一个容器,集合中的对象可以很容易存放到集合中,也很容易将其从集合中取出来,还可以按一定的顺序摆放。Java中提供了不同的集合类,这些类具有不同的存储对象的方式,并提供了相应的方法方便用户对集合进行遍历。

  集合的长度是可变的,用来存放对象的引用。常见的集合类有List集合、Set集合、Map集合。

一.集合类接口

  以下接口的常用方法有很多,这里只提其中重要的几个方法,其它方法在使用时可参照API。

  1. List接口

  List是列表类型,以线性方式存储对象,自身的方法都与索引有关,个别常用方法如下。

方法 返回值 功能描述
add(int index, Object obj) void 用来向集合中的指定索引位置添加对象,集合的索引位置从0开始,其他对象的索引位置相对向后移一位
set(int index, E element) Object 用指定元素替换列表中指定位置的元素,返回以前在指定位置的元素
indexOf(Object obj) int 返回列表中对象第一次出现的索引位置,如果集合中不包含该元素则返回-1
lastIndexOf(Object obj) int 返回列表中对象最后一次出现的索引位置,如果集合汇总不包含该元素则返回-1
listIterator() ListIterator 用来获得一个包含所有对象的ListIterator迭代器

  下面举一个实例,看看如何创建并添加修改集合元素。

 import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; public class CollectionDemoList { public static void main(String[] args) {
String aString = "A", bString = "B", cString = "C", dString = "D", eString = "E"; List<String> list = new LinkedList<>(); // 创建list集合对象
list.add(aString); // 向集合中添加元素
list.add(bString);
list.add(eString);
// 输出语句,用迭代器
Iterator<String> iter = list.iterator(); // 创建集合迭代器
while(iter.hasNext()) { // 遍历集合中的元素
System.out.print(iter.next() + " ");
} System.out.println(); // 换行
list.set(1, cString); // 将索引位置1的对象修改为对象bString
Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.print(it.next() + " ");
}
} }

  上述代码中,add()方法用于向集合中添加元素,set()方法用于修改集合中的元素,迭代器用于遍历集合中的元素并输出(会在下面的内容中涉及)。运行结果如下:

  

  其中创建List集合对象时,“<>”中是集合汇总元素的类型,如上方的String表示集合中的元素由String字符串构成。因为List是一个接口,所以new的是接口的实现类,在Eclipse中光标放在List上按Ctrl+T就可以看见List接口的所有实现类了。

  2. Set接口

  Set接口常用方法如下。

方法 返回值 功能描述
add(Object obj) boolean 若集合中尚存在未指定的元素,则添加此元素
addAll(Collection col) boolean 将参数集合中所有元素添加到集合的尾部
remove(Object obj) boolean 将指定的参数对象移除
clear() void 移除此Set中的所有元素
iterator() Iterator 返回此Set中的元素上进行迭代的迭代器
size() int 返回此Set集合中的所有元素数
isEmpty() boolean 如果Set不包含元素,则返回true

  下面看一个例子,用addAll()方法把List集合对象存入到Set集合中并除掉重复值。

 import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set; public class CollectionDemoSet { public static void main(String[] args) {
List<String> list = new ArrayList<>(); // 创建List集合对象
list.add("dog");
list.add("cat");
list.add("fish");
list.add("cat"); //重复值 Set<String> set = new HashSet<>(); // 创建List对象集合
set.addAll(list); // 将List集合对象添加到Set集合中
Iterator<String> it = set.iterator();
while(it.hasNext()) {
System.out.print(it.next() + " ");
}
} }

  同理,创建Set对象集合时,Set是一个接口,new的是接口的实现类。运行结果如下:

  

  由于Set集合中的对象是无序的,遍历Set集合的结果与插入Set集合的顺序并不相同。

  3. Map接口

  Map接口提供了将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射一个值。Map接口同样提供了clear()、isEmpty()、size()等方法,还有一些常用方法如下。

方法 返回值 功能描述
put(key k, value v) Object 向集合中添加指定的key与value的映射关系
get(Object key) boolean 如果存在指定的键对象,则返回该对象对应的值,否则返回null
values() Collection 返回该集合中所有值对象形成的Collection集合

  下面看一个例子。

 import java.util.HashMap;
import java.util.Map; public class MapDemo { public static void main(String[] args) {
Map<String, String> map = new HashMap<>(); // 创建Map集合
map.put("1", "dog");
map.put("2", "cat");
map.put("3", "fish");
for(int i=1; i<=3; i++) {
System.out.println("第" + i + "个元素是:" + map.get("" + i + ""));
}
} }

  具体写法参照上例即可。运行结果如下:

  

  创建Map集合时,Map接口的“<>”中含有两个类型,分别对应其key与value。

二、集合类接口的实现类

  上面在定义一个接口时,都有new一个实现类,下面介绍几种常用的实现类。

  1. List接口的实现类

  List接口的实现类常用的有ArrayList和LinkedList,这两个实现类在上面的例子中已经出现过了。

  ArrayList类实现了可变的数组,可以根据索引位置对集合进行快速的随机访问。LinkedList类采用链表结构保存对象,便于向集合中插入和删除对象。对于线性结构和链式结构不清楚的朋友可以看我之前的博客“数据的存储结构”,链接:http://www.cnblogs.com/adamjwh/p/5829604.html,也可以自行查阅资料。

  分别通过ArrayList和LinkedList类实例化List集合如下:

List list1 = new ArrayList();
List list2 = new LinkedList();

  2. Set接口的实现类

  Set接口的实现类常用的有HashSet和TreeSet,实现如下:

Set<String> set1 = new HashSet<String>();
Set<String> set2 = new TreeSet<String>();

  3. Map接口的实现类

  Map接口的实现类常用的有HashMap和TreeMap,建议使用HashMap(效率相对较高)。

  实现如下:

Map map = new HashMap();
Map map = new TreeMap();

三、迭代器

  迭代器是利用Iterator接口创建的,在上面已经出现过了。如下是上方Set接口中的代码:

Iterator<String> it = set.iterator();    // 创建一个迭代器
while(it.hasNext()) {
System.out.print(it.next() + " ");
}

  上述代码用Iterator接口和iterator()方法创建了一个迭代器;用while循环遍历这个集合,hasNext()方法是循环判断条件,即如果有元素可以迭代,返回true,循环继续执行;next()方法是返回迭代的下一个元素。除了这两个方法外,Iterator接口还有一个方法是remove(),用于从迭代器指向的collection中移除迭代器返回的最后一个元素。

Java进阶篇(三)——Java集合类的更多相关文章

  1. java提高篇(三)-----java的四舍五入

    Java小事非小事!!!!!!!!!!!! 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么简单了.在讲解之间我们先看如下一个经典的案例: public stat ...

  2. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  3. Java总结篇:Java多线程

    Java总结篇系列:Java多线程 多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: ...

  4. java提高篇-----理解java的三大特性之封装

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  5. Java进阶(四十)Java类、变量、方法修饰符讲解

    Java进阶(四十)Java类.变量.方法修饰符讲解 Java类修饰符 abstract: 将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现. final: 将一个类生命为最终(即非继承类) ...

  6. Java进阶篇(六)——Swing程序设计(上)

    Swing是GUI(图形用户界面)开发工具包,内容有很多,这里会分块编写,但在进阶篇中只编写Swing中的基本要素,包括容器.组件和布局等,更深入的内容会在高级篇中出现.想深入学习的朋友们可查阅有关资 ...

  7. Java进阶篇(六)——Swing程序设计(下)

    三.布局管理器 Swing中,每个组件在容器中都有一个具体的位置和大小,在容器中摆放各自组件时很难判断其具体位置和大小,这里我们就要引入布局管理器了,它提供了基本的布局功能,可以有效的处理整个窗体的布 ...

  8. Java进阶篇(一)——接口、继承与多态

    前几篇是Java的入门篇,主要是了解一下Java语言的相关知识,从本篇开始是Java的进阶篇,这部分内容可以帮助大家用Java开发一些小型应用程序,或者一些小游戏等等. 本篇的主题是接口.继承与多态, ...

  9. Java进阶篇(五)——Java的I/O技术

    程序中,为了永久的保存创建的数据,需要将其保存在磁盘文件中,以便在其它程序中使用它们.Java的I/O技术可以将数据保存到文本文件.二进制文件甚至是ZIP压缩文件中,以达到永久性保存数据的要求. 本篇 ...

随机推荐

  1. 关于使用Log4Net将日志插入oracle数据库中

    1.关于配置文件. <?xml version="1.0" encoding="utf-8" ?> <configuration> &l ...

  2. 发短信utils

    package cn.itcast.bos.utils;   import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; ...

  3. vue2.0 配置build项目打包目录、资源文件(assets\static)打包目录

    vue项目默认的打包路径:根目录下的dist文件夹下: 但是在项目开发中,我们肯定希望项目提交到svn目录或者git目录下,否则每次复制过去,太麻烦了: 那怎么配置打包路径呢?下面来看看: 我们找到打 ...

  4. php mysql语句预编译(preparestatement)

    预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高. 预处理语句的工作原理如下: 预处理:创建 SQL 语句模板并发送到数据库.预留的值使用参数 "?" 标记 .例如: ...

  5. switchery按钮使用

    1.先引入switchery.css 和 switchery.js 2.绘制 checkbox按钮 : a.静态页面写法  未选中时 <input type="checkbox&quo ...

  6. 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)

    Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...

  7. express学习之session

    最新版本的express没有包含session依赖项,需要我们自己配置并安装. 安装方法:npm install express-session 使用:var session = require('e ...

  8. go语言 前言

    1什么是Go? Go是一门开源.并发支持.具有垃圾回收机制.编译性系统编程语言.在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡点.被称为21世纪的C语言.Go语言已经成为云计算.云存储时代 ...

  9. Java学习笔记24(Integer类)

    这里介绍基本数据类型包装类,Integer是int的包装类, 其他的基本数据类型的包装类的方法和Integer的方法几乎一致,会一种即可全会 基本数据类型包装类的特点:用于在基本数据类型和字符串之间进 ...

  10. Java中的移动和复制

    public static boolean Move(File srcFile, String destPath) { // Destination directory File dir = new ...