JAVA编程学习之JAVA集合
一、JAVA集合类
为了保存数量不确定的数据,以及保存具有映射关系的数据(关联数组),java提供了集合类。所有集合类位于java.util包下。
集合类就像容是器,现实生活中容器的功能,无非就是添加对象、删除对象、清空容器、判断容器是否为空等,集合类就为这些功能提供对应的方法。
java集合类是由两个接口Collection 和 Map派生而出
|
Collection |
Map |
||
|
Set |
Queue |
List |
EnumMap IdentityHashMap HashMap LinkedHashMap Hashtable Properties SortedMap TreeMap WeakHashMap |
|
EnumSet SortedSet HashSet TreeSet LinkedHashSet |
Deque PriorityQueue ArrayDeque |
LinkedList ArrayList Vector Stack |
|
Map实现类用于保存具有映射关系的数据。
Set 无法记住添加元素的顺序,所有元素不能重复且无序
List 像一个长度可变的数组
二、Collection和Iterator接口
Iterator类与Collection、Map不同,主要用于遍历Collection中的元素,其对象也被称为迭代器
1、Collection使用如下:
- Boolean add(Object o ) 添加对象,成功添加返回true
- Boolean addAll(Collection c) 将集合C中所有元素加入,成功返回true
- Void clear(); 清空容器
- Boolean contains(Object o ) 返回集合里是否包含指定元素
- Boolean containsAll(Collection c) 返回是否包含集合内所有元素
- Boolean isEmpty() 返回集合是否为空
- Iterator iterator(); 返回一个Iterator对象,用于遍历集合里的元素
- Boolean remove(Object o) 删除集合中指定元素,如果有多个o元素时,删除第一个符合条件的元素
- Boolean removeAll(Collection c) 删除c中包含的所有元素
- Boolean retainAll(Collection c ) 删除集合中不属于集合c的元素
- Int size() 返回集合元素个数
- Object[] toArray() 将集合转化为数组,集合元素变为数组元素
Collection实现类都重写了toString()方法,使用System.out.println()输出集合对象时,将输出[ele1,ele2…….]的形式。
2、遍历Collection
遍历过程中不要使用集合的remove对集合进行删除操作,会抛出异常
Iterator迭代器的使用
- Boolean hasNext() 如果被迭代的集合元素还没有遍历完,返回TRUE
- Object next(); 返回集合中的下一个元素(传值不传对象)
- Void remove() 从集合中删除上一个用next返回的元素
- Void forEachRemaining(Consumer action) 可使用Lambda表达式来遍历
程序示范4种迭代方式:
public static void main(String[] args) {
………………………
//获取books集合对应的迭代器
Iterator it = books.iterator();
//1.使用Lambda表达式遍历集合
books.forEach(obj->System.out.println(“迭代集合元素:”+obj));
//2.使用Iterator遍历集合
while(it.hasNext()) { //迭代是否结束
//返回Object类型的数据,需要强制转换
String book = (String)it.next();
System.out.println(book);
if(book.equals("迭代器")) {
//从集合中删除book对应的元素
it.remove();
}
......
}
……….
//3.使用Lambda表达式遍历Iterator
it.forEachRemaining(obj->System.out.println(“迭代集合元素:”+obj));
//4.使用foreach循环遍历集合元素
for(Object obj : books){
String book = (String)obj;
……….
}
}
3、Predicate操作集合
- removeIf(Predicate filter)方法
//批量删除符合条件的元素(过滤集合),删除所有长度小于10 的字符串元素 Book.removeIf(ele -> ((String)ele).length()<10);
- 使用Predicate可以充分简化集合的运算
例如:Predicate的test方法可以判断该对象是否满足Predicate指定的条件,对于统计集合中符合某个条件的元素有多少,只需要构造一个方法:
public static void main(String[] args) {
//统计包含“Predicate”的元素
System.out.println(calAll(books,ele -> ((String)ele).contains("Predicate")));
//统计包含“test”的元素
System.out.println(calAll(books,ele -> ((String)ele).contains("test")));
//统计字符串大于10的元素
System.out.println(calAll(books,ele -> ((String)ele).length()>10));
}
public static int calAll(Collection books,Predicate p) {
int count = 0;
for(Object obj : books) {
if(p.test(obj)) { //满足Predicate则++
count++;
}
}
return count;
}
JAVA编程学习之JAVA集合的更多相关文章
- Java编程学习知识点分享 入门必看
Java编程学习知识点分享 入门必看 阿尔法颜色组成(alpha color component):颜色组成用来描述颜色的透明度或不透明度.阿尔法组成越高,颜色越不透明. API:应用编程接口.针对软 ...
- java虚拟机学习-触摸java常量池(13-1)
java虚拟机学习-深入理解JVM(1) java虚拟机学习-慢慢琢磨JVM(2) java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制 java虚拟机学习-JVM内存管理:深 ...
- java基础学习总结——java环境变量配置(转)
只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ...
- Java编程——学习大纲
Java基础 Java基础--JDK的安装和配置 Java基础--Eclipse使用 Java基础--基本概念.数据类型.运算符 Java扩展--整型和浮点型在计算机中的存储格式 Java基础--流程 ...
- JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)
package com.itcast.test20140113; import java.util.ArrayList; import java.util.Arrays; import java.ut ...
- Java编程学习技巧和方法总结
干货:必须要有反馈,不断调整,多读书,多些笔记. 解释:不练习你以为你能掌握?笑话,只有自己根据一个个小目标不断的敲,运行,给予你反馈,这样才会真的进步. 纸上谈Java,是永远停止在口. 关于笔 ...
- Java基础学习笔记十七 集合框架(三)之Map
Map接口 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存 ...
- 多线程编程学习六(Java 中的阻塞队列).
介绍 阻塞队列(BlockingQueue)是指当队列满时,队列会阻塞插入元素的线程,直到队列不满:当队列空时,队列会阻塞获得元素的线程,直到队列变非空.阻塞队列就是生产者用来存放元素.消费者用来获取 ...
- Java基础学习(一)---Java初识
一.Java介绍 关于Java的诞生和发展网上比较多,在此就不再赘述了,可以参考http://i.cnblogs.com/EditArticles.aspx?postid=4050233. 1.1 J ...
随机推荐
- 用Eclipse和Tomcat搭建一个本地服务器
服务器软件环境 Eclipse oxygen Tomcat 9.0 SQL Sever 2014 参考资料 https://blog.csdn.net/qq_21154101/article/deta ...
- (四)注册登录--重用Django
一.使用已有登录功能 (1)进入Lib\sitepackages\django\contrib\admin\templates\registration下,将对应模板,复制到项目template模板中 ...
- 当Parallel遇上了DI - Spring并行数据聚合最佳实践
分析淘宝PDP 让我们先看个图, Taobao的PDP(Product Detail Page)页. 打开Chrome Network面板, 让我们来看taobao是怎么加载这个页面数据的. 根据经验 ...
- static和final关键字
static关键字 静态变量 静态变量:又称做类变量,也就是这个变量属于整个类,而不属于单个实例.类所有的实例共享静态变量,可以直接通过类名来访问它.静态变量在内存中只存在一份,当系统第一次加载类时, ...
- Java Collection集合中的iterator方法
Iterator接口的概述 /** * java.util.Iterator接口:选代器(对集合进行遍历) * 有两个常用的方法 * boolean hasNext() * 如果仍有元素可以迭代,则返 ...
- Spring Boot2 系列教程 (十一) | 整合数据缓存 Cache
如题,今天介绍 SpringBoot 的数据缓存.做过开发的都知道程序的瓶颈在于数据库,我们也知道内存的速度是大大快于硬盘的,当需要重复获取相同数据时,一次又一次的请求数据库或者远程服务,导致大量时间 ...
- 问题记录---关于posiition脱离文档流及vue中this.$route信息
1.关于position:fixed会脱离文档流 简单例子: 原型有三个div盒子: 将剥box1设置为position:fixed后 从上图可以看出:box1脱离了文档流,且层级显示优先于正常文档, ...
- 如何编写Robot Framework测试用例1---(基本格式篇)
引子 我们使用符合Robot Framework规范的一种表格语法来编写测试用例.用例一般会是下面这个样子 这样的表格存储到一个文件中,就是一组测试用例.RF支持多种格式,如HTML,TSV,纯文本等 ...
- Jenkins 应用
一.Jenkins Linux shell集成 新建任务 shell-freestyle-job,选择Freestyle project,点击[确定] 添加描述,This is my first ...
- 高通量计算框架HTCondor(四)——案例准备
目录 1. 正文 1.1. 任务划分 1.2. 任务程序 2. 相关 1. 正文 1.1. 任务划分 使用高通量计算第一步就是要针对密集运算任务做任务划分.将一个海量的.耗时的.耗资源的任务划分成合适 ...