文档章节

Java集合,总体框架及主要接口,抽象类分析

郑加威
 郑加威
发布于 2017/05/11 12:30
字数 1490
阅读 1665
收藏 0

概述

集合类作为主要的工具类,主要用于存储对象,常用的数据结构如 栈,队列,列表等。Java集合主要分为Set, List ,Queue ,Map 四种体系。

  • Set:代表无序,不可重复的集合
  • List:代表有序,重复的集合
  • Map:代表的是映射关系的集合,存放的是k-v 的对象
  • Queue:代表的是队列的实现

Java集合可以理解为一种容器,可以把多个对象放入容器中。 集合类主要负责保存数据。所有的集合类都位于java.util包下,集合类中只能保存对象(其实存放的也是对象的引用,但是习惯上称为保存对象)

总体框架

从上面的图中可以看出,集合类主要有两个接口来派生,一个是Collection接口,一个Map接口。由这两个接口的子接口或者实现类组成了Java的集合框架体系。

Collection

Collection是Queue,List,Set的根类 ,是一个高度抽象出来的接口,包含了集合的基本操作和属性。

Collection接口中定义了如下操作集合的方法:

boolean add(E e)  //向集合中添加元素
boolean addAll(Collection<? extends E> c) //把集合c中的所有元素添加到指定的集合里
void clear() //清除集合中的元素,长度变为0
boolean containsAll(Collection<?> c) //返回集合中是否包含集合c中的所有元素
boolean isEmpty() //集合是否为空
Iterator<E> iterator() //返回一个Iterator对象,用于遍历集合中的元素
boolean remove(Object o)   //删除集合中指定的对象
boolean removeAll(Collection<?> c)  //删除所有包含集合c中的所有对象
boolean retainAll(Collection<?> c)  //删除集合c中不包含的对象
int size()  //返回集合里元素的个数
Object[] toArray()  //把集合转化为一个数组
<T> T[] toArray(T[] a)  //把集合转化为一个指定类型的数组,推荐使用此种方式

List

  • 定义
public interface List<E>extends Collection<E> {}

List继承于Collection接口,是一个有序的集合,集合中的每个元素都对应一个下标或者称之为索引,允许有重复的元素存在。可以使用Collection 的全部方法,添加了一些根据索引来操作的方法。

  • API
void add(int index, E element) 
boolean addAll(int index, Collection<? extends E> c) 
ListIterator<E> listIterator(int index) 
E remove(int index) 
E set(int index, E element)  
int size() 
List<E> subList(int fromIndex, int toIndex)

Set

  • 定义
public interface Set<E> extends Collection<E> {}

Set继承于Collection接口,Set中集合元素是无序的不允许重复,它类似于一个罐子,可以可以依次把多个对象放入Set集合中,Set集合记不住元素的放入顺序。与Collection基本相同,没有提供额外的方法。常用的实现类有,HashSet ,TreeSet ,EnumSet等。

  • API
// Set的API
abstract boolean         add(E object)
abstract boolean         addAll(Collection<? extends E> collection)
abstract void            clear()
abstract boolean         contains(Object object)
abstract boolean         containsAll(Collection<?> collection)
abstract boolean         equals(Object object)
abstract int             hashCode()
abstract boolean         isEmpty()
abstract Iterator<E>     iterator()
abstract boolean         remove(Object object)
abstract boolean         removeAll(Collection<?> collection)
abstract boolean         retainAll(Collection<?> collection)
abstract int             size()
abstract <T> T[]         toArray(T[] array)
abstract Object[]        toArray()

Queue

  • 定义
public interface Queue<E> extends Collection<E> {}

Queue继承于Collection接口,Queue是用于模拟队列这种数据结构,队列通常是先进先出的容器,队列的头部,保存在队列中存放时间最长的元素,队列的尾部,保存队列中存放时间最短的元素。新元素放在队列的尾部,访问元素操作会返回队列的头部元素。

  • API
add(E e)
E element()
E peek()   //获取队列的元素但不删除该元素
E poll()   //获取队列头部的元素,删除该元素
E remove() //获取队列头部的元素删除该元素

Map

  • 定义
public interface Map<K,V> {}

Map用于保存具有映射关系的数据,存储的是key-value 对的形式。Map中的Key不允许重复,key和value之间存在单向一对一关系。

  • API
void clear() //删除Map对象中的所有 key-value对
boolean containsKey(Object key) //查询Map中是否包含一个或多个value
boolean containsValue(Object value) //返回Map中是否包含指定的key
Set<Map.Entry<K,V>> entrySet() //返回Map中包含的key-value对所组成的Set集合
V get(Object key) //返回指定key对应的value
boolean isEmpty() //是否为空
Set<K> keySet() //返回key组成的set集合
V put(K key, V value) //添加一个key-value对
void putAll(Map<? extends K,? extends V> m) //将指定map中的key-value复制到当前map中
V remove(Object key) //根据key删除
int size() //map中存放的元素数量
Collection<V> values() //返回map中由value组成的集合

 

AbstractCollection

  • 定义
public abstract class AbstractCollection<E> implements Collection<E> {}

AbstractCollection实现了Collection集合,是一个抽象类。

  • API

AbstractList

  • 定义
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {}
  • API

AbstractSet

  • 定义
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}
  • API

 

AbstractQueue

  • 定义
public abstract class AbstractQueue<E> extends AbstractCollection<E> implements Queue<E> {}
  • API

 

AbstractMap

  • 定义
public abstract class AbstractMap<K,V> implements Map<K,V> {}
  • API

SortedMap

  • 定义
public interface SortedMap<K,V> extends Map<K,V> {}

SortedMap是一个继承于Map接口的接口。它是一个有序的SortedMap键值映射。它的实现类为TreeMap ,TreeMap就是一个红黑树数据结构,每个key-value对即作为红黑树的一个节点,TreeMap有两种排序方式:

- 自然排序,TreeMap的所有key必须实现Comparable接口,而且所有的key应该是同一个类的对象
- 定制排序:创建TreeMap时,传入一个Comparable对象,该对象负责对TreeMap中所有的Key进行排序。
 

 

  • API

 

© 著作权归作者所有

郑加威
粉丝 165
博文 183
码字总数 387300
作品 0
杭州
架构师
私信 提问
Java面试2018常考题目汇总及答案带走不谢!

一、JAVA基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网、云计算、智能手机(Android)等...

java高级架构牛人
2018/06/14
57
1
JAVA接口的概念、分类及与抽象类的区别

Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(...

郭二翔
2011/12/17
992
0
Java集合框架(一)——集合概述

本文概述 本篇文章将分三块内容对Java中的集合框架进行介绍: 一. 集合框架相关概念 二. 集合体系通用方法 三. 集合遍历—Iteractor 一. 集合框架相关概念 集合:用于存储多个对象的容器 1....

Mr_Yanger
2017/11/11
0
0
【转】115个Java面试题和答案——终极列表

本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力。下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Jav...

一只死笨死笨的猪
2014/09/30
109
0
13《Java核心技术》之接口和抽象类有什么区别?

一、提出问题 Java 是非常典型的面向对象语言,曾经有一段时间,程序员整天把面向对象、设计模式挂在嘴边。虽然如今大家对这方面已经不再那么狂热,但是不可否认,掌握面向对象设计原则和技巧...

飞鱼说编程
2018/10/29
18
0

没有更多内容

加载失败,请刷新页面

加载更多

消息中间件——RabbitMQ的高级特性

前言 前面我们介绍了RabbitMQ的安装、各大消息中间件的对比、AMQP核心概念、管控台的使用、快速入门RabbitMQ。本章将介绍RabbitMQ的高级特性。分两篇(上/下)进行介绍。 消息如何保障100%的...

Java架构师ya七
57分钟前
9
0
如何编写高质量的 JS 函数(1) -- 敲山震虎篇

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm7Xi7JxQ 作者:杨昆 一千个读者,有一千个哈姆雷特。 此系列文章将会从函数的执行机制、鲁棒性、函...

vivo互联网技术
今天
7
0
学会这5个Excel技巧,让你拒绝加班

在网上,随处都可以看到Excel技巧,估计已看腻了吧?但下面5个Excel技巧会让你相见恨晚。关键的是它们个个还很实用 图一 技巧1:快速删除边框 有时当我们处理数据需要去掉边框,按Ctrl+Shif...

干货趣分享
今天
11
0
JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
11
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部