java集合大总结
来源:互联网 发布:电脑检测软件 编辑:程序博客网 时间:2024/05/13 23:55
首先,出现今天的需求主要是打算把数据结构,java集合,真实场景的处理都好好的再过一遍。我写了一个实现约瑟夫环的算法,想着在arraylist和linkedlist之间做选择,对比。很多时候功能做出来后,很少是能再去修改,情愿做一个新的。现在想想这个习惯应该改一下。
从整体上来看下集合家族。
玩java的时候,先接触的是数组,那么对于集合的理解也是相对于数组的,所以说下区别:
1.数组是大小固定的,并且在同一个数组只能存放类型一样的数据(基础类型/引用类型)。
2.java集合可以存储和操作数目不固定的一组数据,所有的java集合都在java.util包中,集合只能存放引用类型的数据,不能存放基础数据类型。java集合分3个类型:set(集)、list(列表)、map(映射)。他们3个都是接口。
可以看到Collection是集合类的上级接口,继承它的接口主要有set和list。而很容易混淆的是Collections,它是针对集合类的一个工具类,它提供了一系列静态方法实现对各种集合的搜索,排序,线程安全化等操作。
同样的,Array类提供了动态创建和访问java数组的方法。Arrays类是数组的工具类,提供了1.给数组赋值2.对数组排序3.比较数组4.查找数组元素,这些操作方法。
图的右侧,还有comparable和comparator已经写过了就不多少了。
这个图上错综的分支树,熟悉的要很熟悉,不熟悉的知道怎么回事。说不定冷知识那天刚好要用到。
Arraylist和linkedlist写过了,这里不写。从java认证的题目来一下。
几个面试常见问题:
1.ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?
A:Vector和HashTable是线程同步的(synchronized)。性能上,ArrayList和HashMap分别比Vector和Hashtable要好。
2.大致讲解java集合的体系结构:
A:List、Set、Map是这个集合体系中最主要的三个接口。
其中List和Set继承自Collection接口。
Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。
List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
Map也属于集合系统,但和Collection接口不同。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashM ap、TreeMap和Hashtable是三个主要的实现类。
SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。
3.集合中键值是否允许null小结
- List:可以有多个null,可以有重复值。
- HashSet:能插入一个null(因为内部是以 HashMap实现 ),忽略不插入重复元素。
- TreeSet:不能插入null (因为内部是以 TreeMap 实现 ) ,元素不能重复,如果待插入的元素存在,则忽略不插入,对元素进行排序。
- HashMap:允许一个null键与多个null值,若重复键,则覆盖以前值。
- TreeMap:不允许null键(实际上可以插入一个null键,如果这个Map里只有一个元素是不会报错的,因为一个元素时没有进行排序操作,也就不会报空指针异常,但如果插入第二个时就会立即报错),但允许多个null值,覆盖已有键值。
- HashTable:不允许null键与null值(否则运行进报空指针异常)。也会覆盖以重复值。基于线程同步。
4.对List的选择:
- 对于随机查询与迭代遍历操作,数组比所有的容器都要快。
- 从中间的位置插入和删除元素,LinkedList要比ArrayList快,特别是删除操作。
- Vector通常不如ArrayList快,则且应该避免使用,它目前仍然存在于类库中的原因是为了支持过去的代码。
- 最佳实践:将ArrayList作为默认首选,只有当程序的性能因为经常从list中间进行插入和删除而变差的时候,才去选择LinkedList。当然了,如果只是使用固定数量的元素,就应该选择数组了。
5.对Set的选择:
- HashSet的性能总比TreeSet好(特别是最常用的添加和查找元素操作)。
- TreeSet存在的唯一原因是,它可以维持元素的排序状态,所以只有当你需要一个排好序的Set时,才应该使用TreeSet。
- 对于插入操作,LinkedHashSet比HashSet略微慢一点:这是由于维护链表所带来额外开销造成的。不过,因为有了链表,遍历LinkedHashSet会比HashSet更快。
6.对Map的选择:
- Hashtable和HashMap的效率大致相同(通常HashMap更快一点,所以HashMap有意取代Hashtable)。
- TreeMap通常比HashMap慢,因为要维护排序。
- HashMap正是为快速查询而设计的。
- LinkedHashMap比HashMap慢一点,因为它维护散列数据结构的同时还要维护链表。
7.Stack基于线程安全,Stack类是用Vector来实现的(public class Stack extends Vector),但最好不要用集合API里的这个实现栈,因为它继承于Vector,本 就是一个错误的设计,应该是一个组合的设计关系。
8.Iterator对ArrayList(LinkedList)的操作限制:
- 刚实例化的迭代器如果还没有进行后移(next)操作是不能马上进行删除与修改操作的。
- 可以用ListIterator对集合连续添加与修改,但不能连续删除。
- 进行添加操作后是不能立即进行删除与修改操作的。
- 进行删除操作后可以进行添加,但不能进行修改操作。
- 进行修改后是可以立即进行删除与添加操作的。
/** * 集合的大小会变化,变成后面剩下一个人。 * * @param N * 人数 * @param M * 报数 * @param list */public void playGame(int N, int M, ArrayList<Integer> list) {int k = 0;while (list.size() > 0) {k = k + M;// 第m人的索引位置k = k % (list.size()) - 1;// 判断是否到队尾if (k < 0) {System.out.println(list.get(list.size() - 1));list.remove(list.size() - 1);k = 0;} else {System.out.println(list.get(k));list.remove(k);}pointList(list);}}/** * 打印集合 * * @param list */public void pointList(ArrayList<Integer> list) {for (Integer integer : list) {System.out.print("<" + integer + ">");}}
- java集合大总结
- java集合大家族之总结
- Java三大集合类总结
- 《黑马程序员》java笔记->集合框架集合大总结
- !(环境变量大集合总结)
- 【总结】网页大集合
- java错误处理大集合和解决错误办法总结
- Java collection与map常用集合大总结
- java中的三大集合遍历及foreach循环总结
- JAVA 异常大集合
- Java集合大整理
- java集合大家族
- 集合大家族--Java
- JAVA三大集合
- 【集合】——大总结
- java集合------List集合总结
- java集合------Map集合总结
- Java集合--Set集合总结
- CentOS配置VSFTP服务器
- ViewGroup_listView_hideTitle(Listview多tab上滑悬浮Title)
- 流体分离技术:木糖生产工艺及浓缩技术
- 说说JSON和JSONP,也许你会豁然开朗
- CALayer自定义绘图
- java集合大总结
- 重构 一
- 简约风格应用中UIAlertView到底要不要自定义
- ARMv7 PMU(Performance Monitor Unit) 驱动(cache 命中率)
- Javascript:存储和读取cookie
- Awk学习笔记
- Web.xml 笔记
- urlConn.setRequestProperty是做什么的以及作用
- 流体分离技术:天然色素提取膜过滤浓缩工艺