【java基础 11】java集合框架学习
来源:互联网 发布:mcs51单片机和stc 编辑:程序博客网 时间:2024/06/05 02:35
导读:本篇博客主要是从整体上了解java的集合框架,然后主要介绍几个自己在项目中用到的结构,比如说:hashtable、hashmap、hashset、arraylist等!
一、宏观预览
从宏观上看,主要包括Iterator接口、Collection接口(List和Set子接口)、Map接口!那么在自己的项目中,我常用到的有list、set和map接口!
二、分别解析
2.1,Iterator接口
Iterator接口主要包含3个方法:hasNext()、next()、remove(),一般在遍历元素的时候用到,通常用到set和map中,而list不用,因为list有自己的索引遍历!关于Iterator
public static void main(String[] agrs){List<String> list=new ArrayList<String>();list.add("A");list.add("B");list.add("C");Iterator<String> iter=list.iterator();while(iter.hasNext()){System.out.println(iter.next());}}
备注:remove()方法移除的是上一次next的值
2.2,Collection接口
2.2.1,List接口
这个接口里面,则主要介绍3个实现类
ArrayList:1,如果在初始化ArrayList的时候没有指定初始化长度的话,默认的长度为10;2,ArrayList在增加新元素的时候如果超过了原始的容量的话,ArrayList扩容ensureCapacity的方案为“原始容量*3/2+1";3,ArrayList是线程不安全的。
LinkedList:1,适合于在链表中间需要频繁进行插入和删除操作;2,随机访问速度较慢,查找一个元素需要从头开始一个一个的找。
Vector:1,Vector和ArrayList基本一致,区别在于Vector中的绝大部分方法都使用了同步关键字修饰;2,默认扩容为原来的两倍
用法总结:
多线程:Vector,频繁的插入或者删除:LinkedList,其他:ArrayList
2.2.2,Set接口
Set中的元素实现了不重复,无序,最多允许有一个null元素对象。不过,虽然Set中元素没有顺序,但是元素在set中的位置是有由该元素的HashCode决定的,其具体位置其实是固定的。
Set接口主要包括三个实现类
HashSet:1,仅能存入一个null值;2,元素位置的底层实现通过了hashcode,具体位置固定。
LinkedHashSet:是Set接口的子接口而且还是HashSet接口的子接口,其和HashSet的主要区别是:在hashcode的基础上,增加了链表结构。
TreeSet:是一种排序二叉树,存入Set集合中的值,会按照值的大小进行相关的排序操作,底层算法基于红黑树实现。
用法总结:
需要排序:TreeSet,其他:HashSet或者LinkedHashSet。至于什么时候用Set接口,请看后续的介绍
2.3,Map接口
Map接口实现的是一组Key-Value的键值对的组合。 Map中的每个成员方法由一个关键字(key)和一个值(value)构成。Map接口不直接继承于Collection接口,因为它包装的是一组成对的“键-值”对象的集合,而且在Map接口的集合中也不能有重复的key出现,因为每个键只能与一个成员元素相对应。
Map接口中,主要包含2个实现类
HashMap(会在接下来的博客中被着重介绍,祭奠曾经用它的时候,死去的亡魂)
TreeMap:对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,还可以从TreeMap中指定一个范围以取得其子Map。
PS:HashMap和HashTable的区别
主要的区别是:是否允许null值,是否线程安全,实现的接口
三、使用总结
总得来说,java的集合框架里面,常用的接口是:collection接口和map接口
需要以键—值对存储的时候:选择map接口,通常也就是hashmap;其他,选用collection接口,但需要注意的是:1,效率比较高的是set接口(如果要排序,则特选TreeSet);2,如果有重复的元素,选择list接口(并发场景下,选择Vector)
下一篇文章,主要介绍HashMap
- 【java基础 11】java集合框架学习
- 黑马程序员------Java基础学习------集合框架
- Java基础学习——集合框架
- Java基础学习——集合框架
- Java基础6:集合框架学习总结
- Java集合框架基础
- java基础:集合框架
- Java基础:集合框架
- Java基础-->集合框架
- Java基础--集合框架
- Java基础:集合框架
- java基础:集合框架
- 集合框架(java基础)
- java集合框架基础
- java基础-集合框架
- Java基础-集合框架
- Java基础:集合框架
- Java基础:集合框架
- Linu基本命令总结
- [WinForm] VS2010发布、打包安装程序(超全超详细)
- spark运行简单的demo程序
- 第五天04 JAVA基础语法(认识对象--对象指定与相等性)(学习笔记)
- oracle
- 【java基础 11】java集合框架学习
- leetcode-124. Binary Tree Maximum Path Sum
- 手势 Swift
- Layer.js——强大的弹出框
- 移动应用开发的10个最佳灵感来源
- Java研究与实现编程题自动评分技术
- MyBatis使用大全(1)------入门初体验
- Kotlin随笔 — Null安全性
- 80老翁谈人生(309):关于北大方正集团盗窃火星人源代码事件的历史真相