集合族谱核心成员

集合族谱核心成员

所有的集合类,都实现了Iterator接口,这是用于遍历集合中元素的接口;Java集合框架核心是两个类型的容器,一种是集合(Collection),存储单一元素,一种是图(Map),存储键值对;Collection有3个接口子类,List、Set和Queue,下面是一层抽象类,再下一层是实现类,包括常用的ArrayList,LinkedList,HashSet,HashMap等等。

集合遍历方式:

Iterator 迭代输出

Iterator it = arr.iterator();

while(it.hasNext()){ object o =it.next(); ...}

for 循环

for(int i=0;i

foreach 增强循环

for(int i:arr){...}

Collection接口

image.png

从结构上看包含了一般线性数据结构的的常用方法,比如size(),isEmpty(),add(E),remove(),clear(),toArray()转数组等等。

List

继承与Collection的接口,一个允许重复的有序集合,有明星子类ArrayList和LinkedList。

ArrayList:

//最大长度为2的31次方-8

private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

/**

* The size of the ArrayList (the number of elements it contains).

*

* @serial

*/

private int size;

/**

* Constructs an empty list with the specified initial capacity.

*

* @param initialCapacity the initial capacity of the list

* @throws IllegalArgumentException if the specified initial capacity

* is negative

*/

public ArrayList(int initialCapacity) {

if (initialCapacity > 0) {

this.elementData = new Object[initialCapacity];

} else if (initialCapacity == 0) {

this.elementData = EMPTY_ELEMENTDATA;

} else {

throw new IllegalArgumentException("Illegal Capacity: "+

initialCapacity);

}

}

private void ensureExplicitCapacity(int minCapacity) {

modCount++;

// overflow-conscious code

if (minCapacity - elementData.length > 0)

grow(minCapacity);

}

/**

* Increases the capacity to ensure that it can hold at least the

* number of elements specified by the minimum capacity argument.

*

* @param minCapacity the desired minimum capacity

*/

private void grow(int minCapacity) {

// overflow-conscious code

int oldCapacity = elementData.length;

int newCapacity = oldCapacity + (oldCapacity >> 1);

if (newCapacity - minCapacity < 0)

newCapacity = minCapacity;

if (newCapacity - MAX_ARRAY_SIZE > 0)

newCapacity = hugeCapacity(minCapacity);

// minCapacity is usually close to size, so this is a win:

elementData = Arrays.copyOf(elementData, newCapacity);

}

ArrayList内部用数组存储元素的,这个数组可以动态创建,如果元素个数超过了数组的容量,那么就创建一个更大的新数组,并将当前数组中的所有元素通过Arrays.copy()复制到新数组中。

LinkedList:

链表和数组的最大区别在于它们对元素的存储方式的不同导致它们在对数据进行不同操作时的效率不同。

ArrayList和LinkedList的区别:

ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构;

对于查询操作,ArrayList要优于LinkedList,因为数组直接访问下标,链表需要从头开始移动指针逐个访问。

对于增删操作,LinkedList通常要优于ArrayList,因为数组添加数据,后续元素要逐个后移,链表不需要。

Arrays:

来自java.util.Arrays工具类。常用方法:

asList:将数组转成集合

实现:

public static List asList(T... a) {

return new ArrayList<>(a);

}

binarySearch:在数组中查找某元素的位置

public static int binarySearch(int[] a, int fromIndex, int toIndex,

int key) {

rangeCheck(a.length, fromIndex, toIndex);

return binarySearch0(a, fromIndex, toIndex, key);

}

copyOf和copyOfRange

复制前3位数返回数组

String[] names = { "Eric", "John", "Alan", "Liz" };

//[Eric, John, Alan]

String[] copy = Arrays.copyOf(names2, 3);

从第3个元素开始到结束复制返回数组

String[] names = { "Eric", "John", "Alan", "Liz" };

//[Eric, John, Alan]

String[] copy = Arrays.copyOf(names, 2,names.length);

Set

Set接口扩展自Collection,它与List的不同之处在于,规定Set的实例不包含重复的元素。Set接口有三个具体实现类,分别是散列集HashSet、链式散列集LinkedHashSet和树形集TreeSet。

Queue

队列操作是先进后出(First In First Out),称为限制性线性表。数据插入只能在尾部,删除只能在头部。

队列方法:

image.png

按照以上方法,用数组模拟队列:

public class MyQueen {

private T[] array;

private int max;

private int count;

private int head; //头位置

private int tail; //尾位置

public MyQueen(int length){

max = length;

array = (T[]) new Object[max];

head = -1;

tail = 0;

}

public boolean isEmpty(){

return count == 0;

}

public boolean isFull(){

return count == max;

}

public void add(T e){

if (tail == max - 1) {//已到实际队尾,从头开始

tail = -1;

}

//尾位置后移

tail++;

array[tail] = e;

//长度加一

count++;

}

public T remove(){

T first = array[head];

//头位置后移

head++;

//长度减一

count--;

if(head == tail){ //头尾重合,从头开始

head = 0;

}

return first;

}

public T head(){

return array[head];

}

public int length(){

return count;

}

}

包括添加,删除,判断空,获取长度,获取头元素等。

Map

Map,图,是一种存储键值对映射的容器类,在Map中键可以是任意类型的对象,但不能有重复的键,每个键都对应一个值。Map接口常用的有三个具体实现类,分别是HashMap、LinkedHashMap、TreeMap。

Map类结构:

image.png

其他集合类

Vector

Vector与ArrayList基本一致,不同之处在于Vector使用了关键字synchronized将访问和修改向量的方法都变成同步的了。

①Vector所有方法都是同步,有性能损失。

②Vector早期版本出现的。

③Vector初始length是10 超过length时 以100%比率增长,相比于ArrayList更多消耗内存。

Stack

栈操作特点是后进先出(Last In First Out),就像家里叠盘子一样。栈的插入和删除数据元素的操作只能在栈顶进行。栈继承自类Vector:

public class Stack extends Vector {}

java族谱设计_Java集合族谱总结相关推荐

  1. ATM柜员机JAVA课程设计_JAVA课程设计报告银行ATM机系统.doc

    JAVA课程设计报告银行ATM机系统 Java课程设计报告 题 目 银行ATM机系统 所在院系 软件学院 学生姓名 金磊 专 业 R机械+软件 班 级 R机械094 学 号 2011年 7 月 15日 ...

  2. java扫雷设计_Java扫雷设计

    1.java扫雷设计 1.项目介绍 这是一个简单的自主开发的扫雷游戏,可以实现基本的游戏功能,比如正常游戏.重开.选择难度.计时. 2.前期调查 我主要是向复刻经典windows小游戏扫雷,前期调查也 ...

  3. java 题目设计_JAVA的一些课程设计题目

    本人学校里JAVA课程设计的一些题目,分享给大家,大家可以拿来练练手! 1,课题:算术运算测试 功能要求:该程序用字符界面实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题 ...

  4. 人事管理java 课程设计_java课程设计人事管理系统

    <java课程设计人事管理系统>由会员分享,可在线阅读,更多相关<java课程设计人事管理系统(31页珍藏版)>请在人人文库网上搜索. 1.人事管理系统一. 系统需求分析: ( ...

  5. 打怪游戏Java课程设计_java 课程设计大作业 写的一个RPG游戏(代码+文档)

    [实例简介] java 课程设计大作业 写的一个RPG游戏(代码+文档) java 课程设计大作业 写的一个RPG游戏(代码+文档) [实例截图] [核心代码] Rebellion-master ├─ ...

  6. java list 接口_Java 集合 List接口

    [TOC] List接口 概述有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的 ...

  7. java购物车设计_Java简单购物车设计

    还是存在一些问题(比如clear函数没效果.乱码,单独测试也没,确实找不到问题),路过的给解决下... 第一部分     会话控制 会话跟踪: 使用隐藏表单字段 URL重写,实际就是直接把状态信息加到 ...

  8. java jcf查看_JAVA 集合框架(JCF)

    网络上搜索java集合框架各种理论知识,图谱都有,只要你认真看就会有收获,博主是一个坚决不随意"造轮子"的新人,所以我的这篇文章就总结一下我所学到的JCF. 首先谈一下我的学习路径 ...

  9. java jcf查看_Java 集合系列之一:JCF集合框架概述

    容器,就是可以容纳其他Java对象的对象.Java Collections Framework(JCF)为Java开发者提供了通用的容器 java集合主要划分为四个部分: Collection(Lis ...

最新文章

  1. atlas单机模式代码_用代码玩太无聊,这样玩海盗游戏《ATLAS》单机模式才是正确玩法...
  2. jquery实现tab切换加自动滚动切换
  3. ajax.filter json过滤,$.ajax()的dataFilter方法
  4. 【DSP开发】【VS开发】YUV与RGB格式转换
  5. const_iterator简单介绍
  6. golang tcp keepalive实践
  7. 数据包捕获计算机网络实训,计算机网络-使用网络协议分析器捕捉和分析协议数据包...
  8. C语言malloc和calloc的区别
  9. linux 进程代码,怎样从Linux终端管理进程:10个你必须知道的命令
  10. 起步难、评职称难、压力大!青年科研人员“心病”问题亟待关注!
  11. java -虹软Caused by: java.lang.UnsatisfiedLinkError: Can‘t load library: **\WIN64\libarcsoft_face.dll
  12. python3入门代码-Python3入门经典案例,不埋坑不踩雷.小白也可上手实操(附代码)...
  13. 基础DNS服务 轮训与泛域名解析
  14. 零基础逆向工程11_C语言05_结构体
  15. EDA技术实用教程VHDL篇--名词释义
  16. listary文件查找程序下载和使用
  17. CocosCreator-IOS 开发篇
  18. 二进制、十六进制转换表
  19. python运行按钮灰色_点击后,tkinter菜单按钮变灰了
  20. yarn.lock、package-lock.json、npm-shrinkwrap.json的理解

热门文章

  1. Pr 微电影片头开场效果
  2. MyBatis框架思维导图
  3. python归并算法_python归并算法
  4. 泛函分析笔记(十) 不动点定理及其应用
  5. Mac的AOSP环境配置——磁盘格式设置
  6. NEUQ-ACM预备队-week8-DP2
  7. EtherNet IP转PROFINET网关连接西门子PLC
  8. 远程连接mysql(linux)2003 - Can‘t connect to Mysql server on ‘xxx.xxx.xxx.xxx‘(10061“Unknown error“)
  9. JsTAB选项卡示例集合(二)
  10. 解决vue-pdf 打包后生成worker文件报错问题