集合类概述

1.继承树



2.集合和数组

区别如下:

  • 数组可以存储基本数据类型,也可以存储引用类型;而集合只能存储引用类型(比如存储int,它会自动装箱成Integer)
  • 数组长度固定,集合长度可变

3.List和map

  • 相同

    • 都是集合类,都是接口
  • 区别
    • List存储单列元素,Map存储键值对
    • List允许元素重复,Map不允许key重复(重复则覆盖)
    • List存储有序,Map存储无序
  • 无论是List还是Map,它们实现动态增长都是有性能消耗的。在初始化集合的时候先估算数据量并分配合理的容量会减少动态增长时的消耗。

4.Collection基础功能

Collection接口定义的操作集合的方法有:

  • int size()
  • boolean add(Object o)
  • boolean addAll(Collection c)
  • void clear()
  • boolean contains(Object o)
  • boolean containsAll(Object o)
  • Iterator iterator()
  • boolean isEmpty()
  • boolean remove(Object o)
  • boolean removeAll(Collection c)
  • boolean retainAll(Collection c)
  • Object[] toArray()

集合遍历

1.forEach方法

Java8为Iterator接口新增的forEach默认方法

    import java.util.Collection;
import java.util.HashSet; public class CollectionTest {
public void each() {
Collection<String> books = new HashSet<>();
books.add("aaaaaa");
books.add("bbbbbb"); //1.使用Collection提供的方法
books.forEach(str -> System.out.println(str));

2.使用迭代器Iterator

每个集合都以内部类的方式实现了Iterator接口,Iterator替代了Enumeration,其更加安全,因为其遍历集合时会阻止其他线程修改集合

ListIterator继承了Iterator接口,它用于遍历List集合的元素,由于是双向遍历,不仅可以删除元素,还可以添加和修改元素

Java8增强的Iterator提供的方法如下:

  • boolean hasNext()

  • Object next()

  • void remove()

  • void forEachRemaining(Consumer action)

    	//2使用iterator的方法
    Iterator<String> iterator = books.iterator();
    while (iterator.hasNext()) {
    //需要强制转换
    String str = (String) iterator.next();
    if("aaaaaa".equals(str))
    iterator.remove();
    } //3.使用lambda表达式遍历
    iterator.forEachRemaining(str -> System.out.println(str));
    }
    }

集合过滤

  1. Java8为Collection新增的removeIf(Predicate filter)方法,可以批量删除符合filter条件的元素。使用lambda表达式做参数表述为books.removeIf(str -> ((String)str).length() < 10);
  2. 使用Java8新增的Stream流来操作集合
    • 包含Stream、InStream、LongStream、DoubleStream等流式API,独立使用步骤如下:
	public void stream() {
//1.使用流的builder类方法创建对应的Builder
//2.重复调用add()方法向流中添加元素
//3.调用builder的build()方法获取对应的Stream
IntStream is = IntStream.builder()
.add(1)
.add(2)
.add(3)
.add(5)
.build();
//4.调用Stream的聚集方法(很多),每次只能调用一个,调用完流即不可用
//如System.out.println(is.sum()); //将is映射成新的newIs流
IntStream newIs = is.map(ele -> ele * 2 + 1);
//使用方法引用的方式遍历集合元素
newIs.forEach(System.out::println);
}
- 使用Collection接口提供的stream()默认方法,返回对应集合的流,进而进行聚集操作,简化了集合编程。使用如下:
	public void preStream() {
Collection<String> books = new HashSet<>();
books.add("java");
books.add("myjava");
books.add("JAVA");
System.out.println(books.stream().filter(ele -> ((String)ele).contains("java")).count()); //1.先调用Collection对象的stream方法将集合转换为Stream
//2.再调用Stream的mapToInt方法获取原有的Stream对应的IntStream
//3.再调用forEach方法遍历IntStream中的元素
books.stream().mapToInt(ele -> ((String)ele).length()).forEach(System.out::println);
}

fail-fast机制

  1. 简介

    fail-fast机制是java容器(Collection和Map都存在fail-fast机制)中的一种错误机制。在遍历一个容器对象时,当容器结构被修改(remove方法除外),很有可能会抛出ConcurrentModificationException,产生fail-fast。
  2. 原理

    每次初始化一个迭代器都会执行int expectedModCount = modCount;,modCount表示修改次数,迭代器会通过checkForComodification()方法判断modCount和expectedModCount 是否相等,如果不相等就表示已经有线程修改了集合结构。
  3. 如何避免

    使用java.util.concurrent包下的类去取代java.util包下的类。Java1.5并发包含有线程安全集合类,允许在迭代时修改集合,比如ConcurrentHashMap。

集合00_Java集合框架的更多相关文章

  1. Java集合-----java集合框架常见问题

    1什么是Java集合API Java集合框架API是用来表示和操作集合的统一框架,它包含接口.实现类.以及帮助程序员完成一些编程的算法. 简言之,API在上层完成以下几件事: ● 编程更加省力,提高城 ...

  2. 集合_java集合框架

    转载自http://blog.csdn.net/zsw101259/article/details/7570033 Java集合框架图 简化图: Java平台提供了一个全新的集合框架.“集合框架”主要 ...

  3. Java 集合学习--集合概述

    一.集合框架 集合,通常也叫容器,java中有多种方式保存对象,集合是java保存对象(对象的引用)的方式之一,之前学习的数组是保存对象的最有效的方式,但是数组却存在一个缺陷,数组的大小是固定的,但是 ...

  4. 【BZOJ-4199】品酒大会 后缀数组 + 并查集合并集合

    4199: [Noi2015]品酒大会 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 436  Solved: 243[Submit][Status] ...

  5. Linq to 泛型集合查询集合包括大写M和年龄小于等于18

    #region Linq to 泛型集合查询集合包括大写M和年龄小于等于18            //List<Student> list = new List<Student&g ...

  6. IT第二十一天 - Collections、ArrayList集合、LinkedList集合、Set集合、HashMap集合、集合的操作注意【修20130828】

    NIIT第二十一天 上午 集合 1. 集合Collection存储数据的形式是单个存储的,而Map存储是按照键值对来存储的,键值对:即键+值同时存储的,类似align="center&quo ...

  7. 数组转集合、集合转数组、字符串数组与int型、long型数组等的转换

    在项目中经常会遇到数组转集合.集合转数组.数组之间类型转换等操作 1.数组转集合 为了实现把一个数组转换成一个ArrayList,很多Java程序员会使用如下的代码: String str[] = { ...

  8. 廖雪峰Java5集合-1Java集合简介-1Java结合简介

    1.集合 定义:集合就是一堆东西.集合里的东西,称为元素Element 数学中的集合: 有限集合: * 一个班所有的学生组成的集合 * 一个网站所有的商品组成的集合 无限集合: * 全体自然数集合 * ...

  9. Java集合 -- ArrayList集合及应用

    JAVA集合 对象数组 集合类之ArrayList 学生管理系统 斗地主案例 NO.one 对象数组 1.1 对象数组描述 A:基本类型的数组:存储的元素为基本类型 int[] arr={1,2,3, ...

随机推荐

  1. wordpress学习(四)---url伪静态简单了解

    在page-url.php页面做测试 <h2>url伪静态</h2> 接收到的pagename参数是:<? echo $wp_query->query_vars[' ...

  2. ASP.NET JSON(转http://www.360doc.com/content/14/0615/21/18155648_386887590.shtml)

    概念介绍还是先简单说说Json的一些例子吧.注意,以下概念是我自己定义的,可以参考.net里面的TYPE的模型设计如果有争议,欢迎提出来探讨!1.最简单:{"total":0} t ...

  3. javascript(二):数据类型&数值

    第一部分:数据类型 javascript数据类型通常来说是6种(ES6新增第七种Symbol类型) number:数值 string:字符串 boolean:布尔类型,true或false undef ...

  4. jQuery工具--jQuery.isNumeric(value)和jQuery.trim(str)

    jQuery.isNumeric(value) 概述 确定它的参数是否是一个数字. $.isNumeric() 方法检查它的参数是否代表一个数值.如果是这样,它返回 true.否则,它返回false. ...

  5. django中操作cookie与session

    cookie 什么是Cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息. Cookie的 ...

  6. Class__One HomeWork 实验报告

    石家庄铁道大学信息科学与技术学院       实验报告 2018年----2019年  第一学期               题目:   四则运算和验证码 课程名称:  JAVA语言程序设计 班    ...

  7. 几种线程安全的Map解析

    转载自 面试必问-几种线程安全的Map解析 HashMap线程安全的吗? Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的. 看下面两个场景: 1.当用在方法内的局部变量时,局 ...

  8. [转载]asp.net中,<%#%>,<%=%>和<%%>分别是什么意思,有什么区别

    在asp.net中经常出现包含这种形式<%%>的html代码,总的来说包含下面这样几种格式: 一. <%%> 这种格式实际上就是和asp的用法一样的,只是asp中里面是vbsc ...

  9. ubunta apt install error

    ubuntu系统: 用apt-get命令安装一些软件包时,总报错:E:could not get lock /var/lib/dpkg/lock -open等 出现这个问题的原因可能是有另外一个程序正 ...

  10. 数据分析之pandas01

    Series 一.Series Series是一种类似于一维数组的对象,有两部分组成:     .values:一组数据(ndarray类型)     .index: 相关的数据索引标签 二.seri ...