容器,就是可以容纳其他Java对象的对象。Java Collections Framework(JCF)为Java开发者提供了通用的容器

java集合主要划分为四个部分:

  Collection(List列表、Set集合)、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)

背景

数组的优势:是一种简单的线性序列,可以快速地访问数组元素,效率高。如果从效率和类型检查的角度讲,数组是最好的。
数组的劣势:不灵活。容量需要事先定义好,不能随着需求的变化而扩容。
由于数组的这些劣势,我们需要一种更强大、更灵活、容量随时可扩大的集合(Collection)来存储对象。(扩容)

基本类型

Java容器里只能放对象,对于基本类型(int, long, float, double等),需要将其包装成对象类型后(Integer, Long, Float, Double等)才能放到容器里。很多时候拆包装和解包装能够自动完成。这虽然会导致额外的性能和空间开销,但简化了设计和编程。

泛型

所有容器的内部存放的都是Object对象,泛型机制(语法糖,编译器)只是简化了编程,由编译器自动帮我们完成了强制类型转换而已。JDK 1.4以及之前版本不支持泛型,类型转换需要程序员显式完成。

ArrayList<String> list = new ArrayList<String>();//泛型,参数化类型

泛型的通配符(?):

上限限定:public void getFunc(List<? extends Animal> an),那么表示这里的参数可以传入Animal,或者 Animal的子类

下限限定: public void getFunc(Set<? super Animal> an ),那么表示这里的参数可以传入Animal,或者Animal的父类

使用泛型的注意点:

1、泛型不支持基本数据类型

2、泛型不支持继承,必须保持前后一致(比如这样是错误的:List<Object> list = new ArrayList<String>();

内存

由于Java里对象都在堆上,且对象只能通过引用访问,容器里放的其实是对象的引用而不是对象本身

Java集合框架图

List链表

是Collection的子接口,里面的内容允许重复。

List的特点:线性。即:有序。元素放入的顺序和元素的存储顺序保持一致。

表象上:List最大的特点就是有下标。

ArrayList: 就是作为一个数组的封装出现的,底层就是数组。

LinkedList:底层封装的是一个双向链表。

1、查找、修改用的多的时候用ArrayList。

2、增加、删除用的多的时候(特别是往中间增加、删除)用LinkedList。

3、线程安全,数据量大的时候考虑用vector。

泛型<>:用来控制集合只能操作某一种数据类型。

遍历:1、普通for循环遍历。

     2、使用迭代器Iterator完成遍历。——没有下标从头到尾走一遍,不能操作数组。

     3、for-each循环语句,底层封装的就是迭代器,语法简单,还可以操作数组。推荐使用。

Set集

是collection的子接口,里面的内容不允许重复。

特点:不能放置重复元素,无序存放元素。

表象上:Set没有下标。

HashSet判断两元素不重复:1、调用equals方法比较两对象

    2、两元素的hashcode值保持一致

只有这两个条件同时满足,java才认为是同一对象。

所有重写了equals方法一般要重写hashcode方法,让equals返回true的时候,hashcode返回的值应该一样。

hashSet只有增、删、求长度和遍历等操作。

遍历:1、迭代器

2、for-each

Map映射

是存放一对值的最大接口,所有的元素都以键和值的方式存储。

特点:键值对——键要求唯一,值可以重复

常用子类:HashMap、Properties(专用于操作属性文件)

HashMap

常用操作:增、删、改、查、容、遍历

遍历的时候:不能同时遍历所有的键和值,只能单独遍历键与值。

键在遍历的时候用Set类型来接。

值在遍历的时候用Collection来接。

hashMap与hashTable比较:1、hashMap非线性安全,hashTable是线性安全的。

2、hashMap允许null来做键/值,hashTable不允许。

Properties

常用操作:增、删、查、改、容、存、取。

存的时候,调用的是.store方法存文件,

取的时候,调用.load方法取文件。

文件类型:.properties——固定格式的文本文件,将是工作中使用率第二的配置文件。

Map.Entry

Map.Entry的内部接口,每个

Map.Entry对象都保存着一对key——value的内容,每个map接口中都保存有多个Map.Entry接口实例。

Iterator

集合的输出接口,从前到后输出指定集合中的内容。不能遍历Map,只用来遍历Collection。

ListIterator

是Iterator的子接口,可以进行双向输出。专门用来便利List.

Enumeration

是最早的输出接口,用于输出指定集合中的内容。

collections

集合操作的算法类

包括排序、求最大、最小、反转、随机混排等操作

排序的时候,因为是对对象排序,所以应按一定的业务逻辑的自然顺序排序。

比较器

comparable接口:内部比较器

可对任意数组排序,java泛型技术,二叉树排序原理

1、类实现comparable接口

2、重写compareTo方法

compareTo方法返回的是int类型数据:1表示大于,-1表示小于,0表示相等。

comparator接口:外部比较器

补救的做法

此接口一样需要重写方法,但方法接收两个对象,返回值依然是1、-1、0;

SortedSet

单值的排序接口,实现此接口的集合类,里面的内容可以使用比较器排序。

SortedMap

存放一对值的排序接口,里面内容按照key排序,使用比较器排序。

Queue

队列接口,此接口的子类可以实现队列操作。

抄录网址

  1. day18 集合框架(JCF)
  2. Java集合框架(JCF)归纳总结
  3. Java Collection集合面试题(精选)
  4. java集合框架综述
  5. java集合系列——java集合概述(一)

Java 集合系列之一:JCF集合框架概述的更多相关文章

  1. Java基础系列7——集合系列(1)框架概述

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 集合框架概述 Jav ...

  2. Java——集合系列(1)框架概述

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 集合框架概述 Jav ...

  3. java se系列(十二)集合

    1.集合 1.1.什么是集合 存储对象的容器,面向对象语言对事物的体现,都是以对象的形式来体现的,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式.集合的出现就是为了持有对象.集 ...

  4. Java入门系列-19-泛型集合

    集合 如何存储每天的新闻信息?每天的新闻总数是不固定的,太少浪费空间,太多空间不足. 如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,可以使用Java集合框架. Java 集合框架提 ...

  5. Java集合系列(一):集合的定义及分类

    1. 集合的定义 什么是集合呢? 定义:集合是一个存放对象的引用的容器. 在Java中,集合位于java.util包下. 2. 集合和数组的区别(面试常问) 提到容器,就会想起数组,那么集合和数组的区 ...

  6. Java 集合系列01之 总体框架

      Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set ...

  7. Java集合系列:-----------01集合的整体框架

    内容来自:http://www.cnblogs.com/skywang12345/p/3308498.html Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映 ...

  8. 【转】Java 集合系列01之 总体框架

    Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set集合 ...

  9. Java基础系列--06_抽象类与接口概述

    抽象类 (1)如果多个类中存在相同的方法声明,而方法体不一样,我们就可以只提取方法声明. 如果一个方法只有方法声明,没有方法体,那么这个方法必须用抽象修饰. 而一个类中如果有抽象方法,这个类必须定义为 ...

  10. java多线程系列 JUC锁01 框架

    转载 http://www.cnblogs.com/skywang12345/p/3496098.html 参考 https://www.cnblogs.com/leesf456/p/5453091. ...

随机推荐

  1. Android为TV端助力之Webview与JS双向交互

    package com.hhzt.iptv.adservice; import android.app.Activity;import android.graphics.Bitmap;import a ...

  2. maven+springMVC(二)

    [目录]

  3. VR一体机如何退出FFBM(QFIL)

    前文介绍了通过fastboot命令擦除misc分区,从而退出FFBM的方法.这个方法比较简便,但有不灵的时候,fastboot erase misc命令执行失败,如下图所示. erasing 'mis ...

  4. IIS发布的网站,内网和外网不能访问的解决办法

    A.关闭防火墙.控制面板-Windows防火墙-打开或关闭Windows防火墙(不推荐) B.打开:控制面板-Windows防火墙-高级设置-入站规则,在入站规则窗口中找到”BranchCache内容 ...

  5. casbin-权限管理

    概要 权限管理几乎是每个系统或者服务都会直接或者间接涉及的部分. 权限管理保障了资源(大部分时候就是数据)的安全, 权限管理一般都是和业务强关联, 每当有新的业务或者业务变化时, 不能将精力完全放在业 ...

  6. MySQL(InnoDB)是如何处理死锁的

    MySQL(InnoDB)是如何处理死锁的 一.什么是死锁 官方定义如下:两个事务都持有对方需要的锁,并且在等待对方释放,并且双方都不会释放自己的锁. 这个就好比你有一个人质,对方有一个人质,你们俩去 ...

  7. 理解jQuery的$.extend与$.fn.extend

    https://www.cnblogs.com/xuxiuyu/p/5989743.html 上面这篇博客总结的很棒!!,以下对自己的认识做一个总结 <!DOCTYPE html> < ...

  8. 我用Python爬取了李沧最近一年多的二手房成交数据得出以下结论

    前言 去年年底,博主有购房的意愿,本来是打算在青岛市北购房,怎奈工作变动,意向转移到了李沧,坐等了半年以后,最终选择在红岛附近购置了期房. 也许一些知道青岛红岛的小伙伴会问我,为什么会跑到那鸟不拉屎的 ...

  9. jexus独立版设置支持https

    先用命令找到libssl.so find / -name libssl.so.* 执行完命令之后找到libssl.so.x.x.x如(libssl.so.1.0.0) 再到jexus/runtime/ ...

  10. laravel 预加载特定的列

    /**订单列表 0 已删除 1执行中 2 已过期 * * @param Request $request * * @return \Illuminate\Contracts\View\Factory| ...