一、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集合的更多相关文章

  1. Java编程学习知识点分享 入门必看

    Java编程学习知识点分享 入门必看 阿尔法颜色组成(alpha color component):颜色组成用来描述颜色的透明度或不透明度.阿尔法组成越高,颜色越不透明. API:应用编程接口.针对软 ...

  2. java虚拟机学习-触摸java常量池(13-1)

    java虚拟机学习-深入理解JVM(1) java虚拟机学习-慢慢琢磨JVM(2) java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制 java虚拟机学习-JVM内存管理:深 ...

  3. java基础学习总结——java环境变量配置(转)

    只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ...

  4. Java编程——学习大纲

    Java基础 Java基础--JDK的安装和配置 Java基础--Eclipse使用 Java基础--基本概念.数据类型.运算符 Java扩展--整型和浮点型在计算机中的存储格式 Java基础--流程 ...

  5. JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)

    package com.itcast.test20140113; import java.util.ArrayList; import java.util.Arrays; import java.ut ...

  6. Java编程学习技巧和方法总结

    干货:必须要有反馈,不断调整,多读书,多些笔记. 解释:不练习你以为你能掌握?笑话,只有自己根据一个个小目标不断的敲,运行,给予你反馈,这样才会真的进步. 纸上谈Java,是永远停止在口.   关于笔 ...

  7. Java基础学习笔记十七 集合框架(三)之Map

    Map接口 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存 ...

  8. 多线程编程学习六(Java 中的阻塞队列).

    介绍 阻塞队列(BlockingQueue)是指当队列满时,队列会阻塞插入元素的线程,直到队列不满:当队列空时,队列会阻塞获得元素的线程,直到队列变非空.阻塞队列就是生产者用来存放元素.消费者用来获取 ...

  9. Java基础学习(一)---Java初识

    一.Java介绍 关于Java的诞生和发展网上比较多,在此就不再赘述了,可以参考http://i.cnblogs.com/EditArticles.aspx?postid=4050233. 1.1 J ...

随机推荐

  1. 深度学习论文翻译解析(六):MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Appliications

    论文标题:MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Appliications 论文作者:Andrew ...

  2. TensorFlow——卷积神经网络的相关函数

    在TensorFlow中,使用tr.nn.conv2d来实现卷积操作,使用tf.nn.max_pool进行最大池化操作.通过闯传入不同的参数,来实现各种不同类型的卷积与池化操作. 卷积函数tf.nn. ...

  3. 倍增ST应用 选择客栈(提高组)

    重磅例题!ST表应用!提高组Getting! 1125: B15-倍增-习题:选择客栈[ST表应用] 时间限制: 1 Sec  内存限制: 128 MB提交: 35  解决: 12[提交] [状态] ...

  4. springboot整合@Scheduled定时任务的使用

    1.启动类里面添加注解@EnableScheduling ,例如: @SpringBootApplication@EnableScheduling@MapperScan("com.examp ...

  5. 2、Automapper安装及配置

    一. 安装 我们安装是在 vs 中使用Nuget的方式进行安装 不过安装时需注意一件事情就是,版本问题,我示例使用的是.net framework 4.5.2,所以我安装AutoMapper的版本是7 ...

  6. Ubuntu18.04 安装配置mongodb

    一.安装 # 1. 更新 sudo apt-get update # 2. 安装 sudo apt-get install -y mongodb # 3. 查看是否安装成功 # a. 服务状态 sud ...

  7. python 文件监听

    对文件进行监听.过滤 def tail(filename): f = open(file=filename, mode='r', encoding='utf-8') # 打开文件不能用with,因为监 ...

  8. .net Core发布至IIS完全手册带各种踩坑

    服务器环境配置 和各位大爷报告一下我的服务器环境 : Windows Server 2012 iis 8 小插曲开始: 运维大哥在昨天给了我一台新的server 0环境开始搭建 . 并且没有安装任何的 ...

  9. C++ 引用分析

    引用 左值引用,建立既存对象的别名 右值引用,可用于为临时对象延长生命周期 转发引用,保持函数实参的类别 悬置引用,对象生命周期已经结束的引用,访问改引用为未定义行为 值类别,左值,纯右值,亡值 st ...

  10. 通过haar Cascades检测器来实现面部检测

    在OpenCV中已经封装的很好只需要使用cv::CascadeClassifier类就可以很容易的实现面部的检测, 三大步: 1.训练好的特征分类器配置文件haarcascade_frontalfac ...