2019-03-05 21:31:40 卢浮宫 版权声明:本文为站长原创文章,转载请写明出处
①数组是用来存放对象的容器,他可以存储基本数据类型,长度固定所以不适合在对象未知的情况下进行存储。
②可以存储不同的对象类型,长度可变,使用情况较多
1、list (有序可重复)
①list多存放的数据是有序且可重复的。
②list在存储的时候关注的是索引,所以在进行查询的时候回比较快
③向list中插入数据会伴随着数据的移动,多以数据的掺入及删除会比较慢
2、set (无序不可重复)
①set多存放的数据是无序的且不可重复
②集合中的元素不按照顺序排列,只是把数据放入集合中
3、map (键值对的形式,key唯一,value不唯一)
①map中存放数据是以键值对的形式来进行的
②key不可以重复,value不可重复
③对map进行遍历时会先得到key的set集合,然后根据key的遍历获取指定的value
①都是对list接口的实现,在用法上基本一致
②ArrayList是使用数组实现的,实现了动态数组的数据结构,LinkedList是使用链表来实现的
③在性能上来说,在随机访问是ArrayList的效率更高,(ArrayList可以根据索引进行查询,LnkedList是线性的数据存储方式,所以要移动指针进行查找)
④LinkList多用于增删操作比较多的情况下,ArrayList需要移动数据所以性能后稍差
①都实现了map接口,但是HashMap可以接收null的key和value 而HashTable不行
②HashTable是HashMap的线程安全实现,HashTable是同步的,HashMap不是
③在单线程操作中HashMap效率比HashTable高,在多线程操作中,建议使用HashTable
①JDK1.5之后引入泛型的概念
②它可以为集合提供一个容纳对象的对象类型
③规范了代码,当你插入了其他类型的数据是会编译时报错--类型转换异常
④代码更加简洁不需要进行显示的数据转换了
①在HashMap中是使用key的hashCode()来进行key-value的对应的
②在不允许重复的集合中都是用hash()和equals()来检测重复的
③如果 o1.equals(o2); 那么 o1.hash() == o2.hashCode() 为 true;
④如果 o1.hashCode() == o2,hashCode(); 并不意味着 o1.equals(o2) 为true
①根据类型选用。如果指定了大小我们用Array而不是ArrayList,如果想根据顺序来遍历Map则使用TreeMap,如果不想重复就是用ser
②一些集合类允许指定初始容量,如果我们能很好的预估元素的存储数量那么就会避免集合重新Hash或者动态扩容
③使用类型安全的泛型
④一切从实际着手