类集框架(集合框架)是一个用来代表和操纵集合的统一架构。所有的类集框架都包含如下内容:

接口:是代表类集的抽象数据类型。之所以定义多个接口,是为了以不同的方式操作集合对象。

例如:Collection、List、Set、Map、Queue等。

实现(类):是类集接口的具体实现。从本质上讲,它们是可重复使用的数据结构。

例如:ArrayList、LinkedList、HashSet、HashMap。

算法:是实现类集接口的对象里的方法执行的一些有用的计算。

例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

部分类集框架体系如图:

类集的关系框架图:

常用类集

下面较为常用的方法我都用粗体标识了,希望大家注意。

下面的类都是集合,即 一组数据,而不是单一的一个。

Collection接口

Collection:集合

方法

返回类型

描述

备注

add(E o)

boolean

向集合中插入对象

addAll(Collection extends E> c)

boolean

将一个集合的内容插入进来

clear()

void

清除此集合中的所有元素

contains(Object o)

boolean

判断某一个对象是否在集合中存在

containsAll(Collection> c)

boolean

判断某一组对象是否在集合中存在

equals(Object o)

boolean

对象比较

hashCode()

int

哈希码

isEmpty()

boolean

集合是否为空

iterator()

Iterator

为Iterator接口实例化

remove(Object o)

boolean

删除指定对象

removeAll(Collection> c)

boolean

删除一组对象

retainAll(Collection> c)

boolean

保存指定内容

size()

int

求出集合的大小

toArray()

Object[]

将一个集合变为对象数组

toArray(E[] a)

E[]

指定好返回的对象数组类型

在一般的开发中,往往很少直接使用Collection接口进行开发,基本思都是使用其子接口。

子接口主要有:List、Set、Queue、SortedSet。

List接口

List:线性表

方法

返回类型

描述

备注

get(int index)

E

返回指定位置的元素

indexOf(Object o)

int

查找指定元素的位置

set(int index, E element)

E

替换指定位置的元素

remove(int index)

E

按指定的位置删除元素

add(int index, E element)

void

在指定位置增加元素

addAll(int index, Collection extends E> c)

boolean

在指定位置增加一组元素

lastIndexOf(Object o)

int

从后往前查找指定元素的位置

listIterator()

ListIterator

为ListIterator接口实例化

subList(int fromIndex, int toIndex)

List

取出集合中的子集合

ArrayList

ArrayList:数组

方法

返回类型

描述

备注

get(int index)

E

返回指定位置的元素

indexOf(Object o)

int

查找指定元素的位置

set(int index, E element)

E

替换指定位置的元素

remove(int index)

E

按指定的位置删除元素

add(int index, E element)

void

在指定位置增加元素

addAll(int index, Collection extends E> c)

boolean

在指定位置增加一组元素

lastIndexOf(Object o)

int

从后往前查找指定元素的位置

listIterator()

ListIterator

为ListIterator接口实例化

subList(int fromIndex, int toIndex)

List

取出集合中的子集合

注意:一般用List接口实例化ArrayList类,即 List all = new ArrayList();

原因:编程是要面向对象编程,针对抽象(接口),而非具体。List 是接口,ArrayList是实现。

这是一种很好的设计模式.一个接口有多种实现,这种写法是java面向对象的一种思想,依赖倒置原则,即 依赖于抽象不依赖于实现(具体)。

从Java语法上,这种方式是使用接口引用指向具体实现,这样大大提高了代码使用的灵活性。

比如,你若希望用LinkedList的实现来替代ArrayList的话,只需改动一行即可。

LinkedList

LinkedList:链表

方法

返回类型

描述

备注

addFirst(E o)

void

在链表开头增加元素

addLast(E o)

void

在链表结尾增加元素

offer(E o)

boolean

将指定元素增加到链表的结尾

removeFirst()

E

删除链表的第一个元素

removeLast()

E

删除链表的最后一个元素

输出

Iterator

Iterator:迭代输出

方法

返回类型

描述

备注

hasNext()

boolean

判断是否有下一个值

是否有下一个

next()

E

后移,取出当前元素

取出

remove()

void

移除当前元素

移除

注意:Iterator是从头节点(无数据)开始的,而不是第一个有效节点,所以我们用hasNext()判断是否有值,next()来取值。

例子:

List all = new ArrayList(); //实例化List接口

all.add("hello");

all.add("_");

all.add("world");

Iterator iter = all.iterator(); //直接实例化Iterator接口

while(iter.hasNext()) {

System.out.print(iter.next() + "、");

}

程序运行结果:

hello、_、world、

ListIterator

ListIterator:双向迭代输出

方法

返回类型

描述

备注

remove()

void

移除当前元素

add(E o)

void

将指定元素增加集合

hasNext()

boolean

判断是否有下一个值

next()

E

取出当前元素

nextIndex()

int

返回下一个元素的索引号

hasPrevious()

boolean

判断是否有上一个元素

previous()

E

取出当前元素

previousIndex()

int

返回上一个元素的索引号

set(E o)

void

替换元素

例子:

List all = new ArrayList();

all.add("hello");

all.add("_");

all.add("world");

ListIterator iter = all.listIterator(); // 实例化ListIterator接口

System.out.print("由前向后输出:");

while(iter.hasNext()) {

String s = iter.next();

System.out.print(str + "、");

}

System.out.print("由后向前输出:");

while(iter.hasPrevious()) {

String s = iter.previous();

System.out.print(str + "、");

}

程序运行结果:

由前向后输出:hello、_、world、

由后向前输出:world、_、hello、

foreach

格式:用对象遍历集合数组

for(类 对象: 集合数组) {

//操作

}

例子:

List all = new ArrayList();

all.add("hello");

all.add("_");

all.add("world");

for(String s: all) {

System.out.print(s + "、");

}

程序运行结果:

hello、_、world、

Stack

Stack:栈

方法

返回类型

描述

备注

empty()

boolean

测试栈是否为空

检查是否空

push(E item)

E

入栈

入栈

pop()

E

出栈,同时删除

出栈

peek()

E

查看栈顶,但不删除

栈顶

search(Object o)

int

在栈中查找

查找

例子:

Stack s = new Stack();

s.push("A");

s.push("B");

s.push("C");

System.out.print(s.pop + '、');

System.out.print(s.pop + '、');

System.out.print(s.pop + '、');

程序运行结果:

C、B、A、

Queue

Queue:队列

作为一个接口,它没有实现任何具体功能(都是抽象方法),所以我们只能用其他的类来实现Queue接口。

LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

Queue queue = new LinkedList();

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

方法

返回类型

描述

备注

offer(E o)

boolean

将指定元素增加到队尾

如果队列已满,则返回false

poll()

E

找到并删除队头

(获取)如果队列为空,则返回null

peek()

E

找到但不删除队头

(读取)如果队列为空,则返回null

add(E o)

void

将指定元素增加到队尾

如果队列已满,则抛出一个IIIegaISlabEepeplian异常

remove()

E

找到并移除队头

(移除本应有的)如果队列为空,则抛出一个NoSuchElementException异常

element()

E

找到队头

(找到本应有的元素)如果队列为空,则抛出一个NoSuchElementException异常

offer,add 区别:

一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。

这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。

poll,remove 区别:

remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。

peek,element区别:

element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。

注意:add()和remove()是继承于Collection类的,所以我们尽量用前三个方法来操作队列。

例子:

注意:Queue接口是用LinkedList类实现的,Queue queue = new LinkedList();)

Queue queue=new LinkedList();

queue.offer("Hello");

queue.offer("World!");

queue.offer("你好!");

System.out.println(queue.size());

for(String str: queue){

System.out.printf(str + " ");

}

System.out.printf("\n");

System.out.println(queue.size());

String str;

while((str=queue.poll()) != null) {

System.out.printf(str + " ");

}

System.out.println();

System.out.println(queue.size());

程序运行结果:

3

Hello World! 你好!

3

Hello World! 你好!

0

Set

Set:集合(无序、不重复)

Set可以用于去掉重复元素,遇到重复元素不准加入。

方法

返回类型

描述

备注

add(E o)

boolean

向集合中插入对象

addAll(Collection extends E> c)

boolean

将一个集合的内容插入进来

clear()

void

清除此集合中的所有元素

contains(Object o)

boolean

判断某一个对象是否在集合中存在

containsAll(Collection> c)

boolean

判断某一组对象是否在集合中存在

equals(Object o)

boolean

对象比较

hashCode()

int

哈希码

isEmpty()

boolean

集合是否为空

iterator()

Iterator

为Iterator接口实例化

remove(Object o)

boolean

删除指定对象

removeAll(Collection> c)

boolean

删除一组对象

retainAll(Collection> c)

boolean

保存指定内容

size()

int

求出集合的大小

toArray()

Object[]

将一个集合变为对象数组

toArray(E[] a)

E[]

指定好返回的对象数组类型

Set和List的区别:

Set 接口实例存储的是无序的,不重复的数据。

List 接口实例存储的是有序的,可以重复的元素。

Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 。

List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 。

Map

Map:映射(键值对表)(一组键值对,不是单一的一个)

Map接口定义的集合又称为查找表,用于存储所谓“key-value"映射对。

Key可以看成是Value的索引,作为key的对象在集合中不可重复。

注意:是集合,查找表,即 一组键值对,不是单一的一个。

与Collection类似,如果想要使用Map接口也必须依靠其子类实例化。Map 接口中常用的子类介绍如下:

HashMap:无序存放的,是新的操作类,key不允许重复。(常用)

Hashtable:无序存放的,是旧的操作类,key不允许重复。

TreeMap:可以排序的Map集合,按集合中的key排序,不允许key重复。

WeakHashMap:弱引用的Map集合,当集合中的某些内容不再使用时清除掉无用的数据,使用gc进行回收。

IdentityHashMap:key可以重复的Map集合。

由于Set和Map都不可以有重复的元素,所以一般都采用Hash来实现,方便在增加元素时直接使用哈希函数,比较Hash表(改进的链地址法,数组+链表+红黑树)判断是否重复,不用一个一个遍历一遍去比较,提高效率。

java机考_【Java】(机考常用)类集相关推荐

  1. java取负数_[Java] 告别“CV 工程师”码出高效!(基础篇)

    作为一名资深的 CV 工程师,某天,当我再一次日常看见满屏的报错信息与键盘上已经磨的泛白的 Ctrl.C.V 这三个按键时,我顿悟了. 百度谷歌复制粘贴虽然很香,但是总是依靠前人种树,终会有一天失去乘 ...

  2. Java SE有几个代码_JavaSE常用类及方法的介绍(附代码)

    本篇文章给大家带来的内容是关于JavaSE常用类及方法的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.基本数据类型比较用:== 2.引用数据类型比较用:equal ...

  3. Java常用类集接口以及实现方式总结

    最近学习map-reduce原理以及map-reduce编程,于是顺带着学习下Java编程,对于Java常用的数据结构和类集,我总结到mind图中,便于理清相互之间的关系 package leiji; ...

  4. 面试准备——Java回顾:高级编程(多线程、常用类、集合、泛型、IO流、反射、动态代理、新特性)

    多线程 程序.进程.线程 程序:完成特定任务.用某种语言编写的一组指令的结合,一段静态的代码,静态对象: 进程:程序的一次执行过程,即正在执行的程序: 线程:进程可细化为线程,是一个程序内部的一条执行 ...

  5. java 日历计算农历和节假日的常用类(包括除夕的算法)

    最近在写日历,发现很多开源的常用的日历根本不能显示出除夕这个节日,所以在github上找到一个计算出大部分农历之后修改了一下,这里科普下,除夕有可能是29,也有可能是30,中国农历一个月只有29天或者 ...

  6. java学习笔记(13) 第13章 - 常用类

    第13 章常用类-目录 13.1 包装类 13.1.1 包装类的分类.包装类和基本数据的转换.案例演示.课堂测试 13.1.2 包装类型和String 类型的相互转换 13.1.3 Integer 类 ...

  7. java jdbc 工具_实现JDBC的工具类

    package mysql; /* * 实现JDBC的工具类 * 定义方法,直接返回数据库的连接对象 */ import java.sql.Connection; import java.sql.Dr ...

  8. java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习

    本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...

  9. java 文本压缩_[Java基础]Java使用GZIP进行文本压缩

    import java.io.IOException; import java.util.zip.GZIPOutputStream; import org.apache.commons.io.outp ...

  10. java private 对象_[Java笔记]类的所有构造器都是private权限,就一定没有办法实例化它的对象了么?...

    笔者以前学过C++语言.众所周知,C++也是一门面向对象程序设计语言.还记得当时在大学的时候,老师讲过这样的话:类的构造函数不应该设置成private权限,这样的话还怎么去实例化类的对象?当时也信以为 ...

最新文章

  1. 国内首部高尔夫商战小说《手腕》(林健锋著)
  2. opencv双目测距资料整理
  3. C# 非模式窗体show()和模式窗体showdialog()的区别
  4. 开源.NET企业级应用系统 OpenVista
  5. comparator 字符串比较大小_java – 如何使用Comparator比较空值?
  6. C++接收字符串数组_电脑编程 你该知道的字符知识 C语言程序设计字符数组全归纳...
  7. Linux网络实时流量监测工具iftop的安装使用
  8. python特性 property_python特性property
  9. 很有用的SQLServer全局变量
  10. 手把手教你破速达5000PRO v2.33加密狗
  11. html打印强制分页
  12. 这12款idea插件,能让你代码飞起来!
  13. 深度 | 蚂蚁金融智能平台:让AI在金融场景发挥作用
  14. npm install node-sass的时候报错ERR gyp ERR C++
  15. 信息论——JS散度(Jensen-Shannon)
  16. 大数据时代,财务管理人员要成为复合型人才
  17. 【Unity3D】学习笔记(第2记) 2D游戏开发基本技巧之背景制作
  18. Android设置drawableRight或drawableLeft后设置图标与文字间距
  19. 线程通信,生产者消费者问题案例,模拟来电提醒和接听电话
  20. Flink 相关操作

热门文章

  1. Oracle varchar类型数值排序问题
  2. mysql in 查询优化_mysql in 集合查询优化问题。
  3. 网页制作 css样式,网页设计与制作-CSS样式.ppt
  4. poj 2229 Sumsets(类似于n的m划分)
  5. 纯CSS导航栏下划线跟随效果
  6. 解决XCode安装插件后插件不能使用的问题(转载)
  7. Oracle学习(四)_SQL函数
  8. urtracker 项目管理工具
  9. Google 网站品质指南
  10. firefox android 插件,Firefox for Android将很快迎来更多扩展插件