首先,小编给你们看一张思维导图认识一下集合框架的构成体系,便于记忆和理解。
下面整理下集合中的问题:❃✪❃❦❃❃✪❃❦❃❃✪❃❦❃❃✪❃❦❃❃✪❃❦❃❃✪❃❦❃❃✪❃❦❃
1. ArrayList 和 LinkedList的区别:
ArrayList | LinkedList |
---|---|
数组结构 | 链表结构 |
ArrayList查询快 | LinkedList增删快 |
**通过代码测试区别:
public class Test {
public static void main(String[] args) {
//比校添加方面
ArrayList arrayList = new ArrayList() ;
LinkedList linkedList = new LinkedList();
//給毎个集合中添加50000条数据,比狡时间
for(int i=0;i<50000; i++){
Object o=new Object() ;
//arrayList. add(0, o);//耗吋多
linkedList. add(0,o);//耗吋外少
}
long start=System. currentTimeMillis();
//比较拿数据方面
for (int i = 0;i < linkedList.size(); i++) {
// arrayList.get(i);//耗吋少
linkedList. get(i);//耗时多
}
long end=System. currentTimeMillis();
System. out. println("耗肘: " + (end-start));
}
}
2. 怎么将一个数组转集合list?怎么将一个List集合转数组?
> ✪ 数组转集合:Arrays.asList();
> ✪ 集合转数组:list.toArray();
3. Array 和 ArrayList的区别:
Array | ArrayList |
---|---|
Java中的数组 | 动态数组(集合) |
Array长度固定 | ArrayList长度可变 |
Array只能存储同类型数据 | ArrayList可以存储不同类型 数据 |
4. HashSet,TreeSet和 LinkedHashSet 的区别:
> ✪ HashSet :速度快
> ✪ TreeSet :有排序功能的集合
> ✪ LinkedHashSet :按照插入的顺序的集合
5. HashMap,TreeMap和 LinkedHashMap 的区别:
> ✪ HashMap:插入,删除和定位元素,速度快
> ✪ TreeMap:有排序功能的集合
> ✪ LinkedHashMap :按照插入的顺序存储集合
6. HashMap和 HashSet的区别:
HashMap | HashSet |
---|---|
实现map接口 | 实现set接口 |
键值对存储 | 存储对象 |
调用put()方法添加元素 | 调用add()方法添加元素 |
用key计算hashcode | 用成员变量计算hashcode |
取值较快,用唯一键获取对象 | 较慢 |
7. List,Set 和 Map的区别:
> ✪ List:允许重复元素 **** 可插入多个null元素 **** 有序容器
> ✪ Set :不允许重复元素 **** 只能插入一个null元素 **** 无序容器
> ✪ Map:键值对存储,键唯一,值可重复 **** 键只能插入一个null元素,值可插入多个null **** 无序容器
8. HashMap的实现原理:
> ❃❃ 使用put(key,value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()
方法传递键和值时,我们先对键调用 hashCode()方法,返回的hashCode用于找到bucket位置
来储存Entry对象。
> ❃❃ 如果两个键的hashcode相同后会进行扩容,默认的负载因子大小为0.75,也就是说,当一个map
填满了75%的bucket时候,和其它集合类(如ArrayList等)一样,将会创建原来HashMap大小的两倍
的bucket数组,来重新调整map的大小,并将原来的对象放入新的bucket数组中。这个过程叫作
rehashing,因为它调用hash方法找到新的bucket位置。
…
9. Collection接口的remove()方法,和 Iterator接口的remove()方法的区别:
①性能方面:
> Collection接口的remove()方法:查询效率较低,属于单链表结构,需要从集合中一个一个的遍历找
出删除的项才能删除。
> Iterator接口的remove()方法:结合next()方法使用,在集合中是隔一项删除一项的方式,效率高。
①容错方面:
> Collection接口的remove()方法:使用Iterator遍历时会报异常,因为Iterator内部对象个数会改变集合
中的个数。个数不一致会报异常
> Iterator接口的remove()方法:使用Iterator遍历时不会报异常,因为Iterator内部对象个数和集合中个
数会保持一致。
//通过代码测试区别:
public class Test {
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 0; i<10; i++){
list.add(i);
}
Iterator iterator = list.iterator();
while (iterator.hasNext()){
Object o = iterator.next();
iterator.remove();//不会出现异常
// list.remove(o);//会出现异常
}
}
}
ღ 好了ღ. 集合中的问题小编就分享到这里 _