Java进阶篇(三)——Java集合类
集合可以看作一个容器,集合中的对象可以很容易存放到集合中,也很容易将其从集合中取出来,还可以按一定的顺序摆放。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集合类的更多相关文章
- java提高篇(三)-----java的四舍五入
Java小事非小事!!!!!!!!!!!! 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么简单了.在讲解之间我们先看如下一个经典的案例: public stat ...
- Java进阶(三)多线程开发关键技术
原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...
- Java总结篇:Java多线程
Java总结篇系列:Java多线程 多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: ...
- java提高篇-----理解java的三大特性之封装
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- Java进阶(四十)Java类、变量、方法修饰符讲解
Java进阶(四十)Java类.变量.方法修饰符讲解 Java类修饰符 abstract: 将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现. final: 将一个类生命为最终(即非继承类) ...
- Java进阶篇(六)——Swing程序设计(上)
Swing是GUI(图形用户界面)开发工具包,内容有很多,这里会分块编写,但在进阶篇中只编写Swing中的基本要素,包括容器.组件和布局等,更深入的内容会在高级篇中出现.想深入学习的朋友们可查阅有关资 ...
- Java进阶篇(六)——Swing程序设计(下)
三.布局管理器 Swing中,每个组件在容器中都有一个具体的位置和大小,在容器中摆放各自组件时很难判断其具体位置和大小,这里我们就要引入布局管理器了,它提供了基本的布局功能,可以有效的处理整个窗体的布 ...
- Java进阶篇(一)——接口、继承与多态
前几篇是Java的入门篇,主要是了解一下Java语言的相关知识,从本篇开始是Java的进阶篇,这部分内容可以帮助大家用Java开发一些小型应用程序,或者一些小游戏等等. 本篇的主题是接口.继承与多态, ...
- Java进阶篇(五)——Java的I/O技术
程序中,为了永久的保存创建的数据,需要将其保存在磁盘文件中,以便在其它程序中使用它们.Java的I/O技术可以将数据保存到文本文件.二进制文件甚至是ZIP压缩文件中,以达到永久性保存数据的要求. 本篇 ...
随机推荐
- jquery学习总结(超级详细)
本文仅针对jquery的部分知识点做总结,更为全面的可以去官网看中文文档.可以更为详细的了解jquery及其特性. window.onload $(document).ready() 执行 ...
- PHP重要知识点
1 获取文件名或目录路径 getcwd() :显示是 在哪个文件里调用此文件 的目录 __DIR__ :当前内容写在哪个文件就显示这个文件目录 __FILE__ : 当前内容写在哪个文件就显示这个文件 ...
- Robot Framework学习笔记(六)------RIDE界面说明
RIDE是一款专门用来编辑Robot Framework用例的软件,用Python编写并且开源. 1.测试项目.测试套件Edit 标签 测试项目和测试套件所提供的 Edit 标签的功能是一样的. 在 ...
- webstorm方向键与电脑快捷键冲突
1.桌面上,单击鼠标右键,选择"图形属性" 2.单击"选项和支持" 3.在图示框框中,修改电脑上的快捷键
- Hadoop源码篇---解读Mapprer源码outPut输出
一.前述 上次讲完MapReduce的输入后,这次开始讲MapReduce的输出.注意MapReduce的原语很重要: "相同"的key为一组,调用一次reduce方法,方法内迭代 ...
- Java 写三角形 空心三角形 菱形 空心菱形
闲来无事,练习了一下Java基础中的循环语句.练习循环语句,当然少不了,用*打印出来三角形.空心三角形.菱形等这样的几何图形. 粗心大意,失误两次: 一.三角形 遇到一些小问题: 二.金字塔 由于三角 ...
- Windows程序设计学习笔记(一)Windows内存管理初步
学习Windows程序设计也有一些时间了,为了记录自己的学习成果,以便以后查看,我希望自己能够坚持写下一系列的学习心得,对自己学习的内容进行总结,同时与大家交流.因为刚学习所以可能有的地方写不不正确, ...
- 使用xUnit为.net core程序进行单元测试(上)
一. 导读 为什么要编写自动化测试程序(Automated Tests)? 可以频繁的进行测试 可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动测试. 肯定比人工测试要快. 可以 ...
- Android4.0 声卡配置-高通msm8916移植
一个正常的UAC设备插入Android 7.0是默认打开UAC配置的,打印的log如下: [ - using xhci_hcd [ - [ -, Product=, SerialNumber= [ - ...
- 11、ABPZero系列教程之拼多多卖家工具 拼团提醒功能页面实现
上一篇讲解了拼团提醒逻辑功能实现,现在继续实现页面功能. Core项目 打开AbpZeroTemplate-zh-CN.xml语言文件,在末尾添加如下代码: 文件路径:D:\abp version\a ...