Java 集合系列之一:JCF集合框架概述

容器,就是能够容纳其余Java对象的对象。Java Collections Framework(JCF)为Java开发者提供了通用的容器html

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的父类工具

使用泛型的注意点:

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

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

内存

因为Java里对象都在堆上,且对象只能经过引用访问,容器里放的实际上是对象的引用而不是对象自己

Java集合框架图

 

List链表

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

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

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

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

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

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

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

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

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

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

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

     三、for-each循环语句,底层封装的就是迭代器,语法简单,还能够操做数组。推荐使用。

 

Set集

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

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

表象上:Set没有下标。

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

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

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

全部重写了equals方法通常要重写hashcode方法,让equals返回true的时候,hashcode返回的值应该同样。

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

遍历:一、迭代器

         二、for-each

 

Map映射

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

特色:键值对——键要求惟一,值能够重复

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

HashMap

经常使用操做:增、删、改、查、容、遍历

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

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

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

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

                                     二、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泛型技术,二叉树排序原理

一、类实现comparable接口

二、重写compareTo方法

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

comparator接口:外部比较器

补救的作法

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

 

SortedSet

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

SortedMap

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

 

Queue

队列接口,此接口的子类能够实现队列操做。

 

 

抄录网址

  1. day18 集合框架(JCF)
  2. Java集合框架(JCF)概括总结
  3. Java Collection集合面试题(精选)
  4. java集合框架综述
  5. java集合系列——java集合概述(一)
相关文章
相关标签/搜索