1 请讲一下Java里面的容器
分两大类,Map和Collection。而Collection又有子接口List(数据存储顺序和插入顺序是一样的)、Set(里面的元素具有唯一性)
Map是存储键值对的,里面的健不可以重复,但值可以重复
2 Arraylist和LinkedList的区别
. 对于List主要有ArrayList和LinkedList两种实现。实现的数据结构不同,所以主要的区别也都是和数据结构相关的
-
ArrayList基于数组,随机访问快,而对于中间元素的插入删除效率比较低,而且需要考虑扩容问题.
-
LinkedList,则 基于链表,和ArrayList提到的正相反,随机访问慢,但对于中间元素的插入和删除更有效率。(不适合查询)
Set也是一种Collection,和List比起来主要体现在元素唯一性。
3 Connection接口的Remove()方法和Iteractor()接口的Remove()方法的区别
集合的remove(带参);
iterator()无参 ,必须配合next()方法使用
从两方面比较
- 性能方面:Connection的remove的方法必须一个一个的查找需要被删除的项,(因为单链表结构),查询效率低
Iterator的remove()方法结合next()方法使用,他会每隔一项删除一项,所以效率更高
2.容错方面:如果使用Iterator遍历时,使用Connection的remove()方法会报ConcurrentModificationException异常,而Iterator遍历时,则不会报错
如以下代码块
@Test
public void contextLoads() {
List list=new ArrayList();
for (int i = 0; i < 10; i++) {
list.add(i);
}
Iterator iterator = list.iterator();
while(iterator.hasNext()){
Object next = iterator.next();
//list.remove(next);会报错
iterator.remove();
}
}
Array和ArrayList的区别
- Array是Java中的数组,声明数组存在三种方式
int[] a=new int[10];
int a1[]=new int[10];
int a2[]={1,2,3,4};
//格式1:
int [] arr = new int[5];
//格式2:
int [] arr1 = new int[]{1,3,5,7};
// 格式3:
int[]arr2 = {1,3,5,7};
- ArrayList是一个集合,也是一个动态数组,他可以动态的添加和删除元素,他的长度是可变的,可以添加不同类型的元素
从三个方面来回答面试官:
- arrayList比array复杂
- 存储的数据类型:array只单纯的存储一种数据类型,而ArrayList可以存储不同的数据类型
3 array的长度固定,不可变,arrayList长度可变
数组集合之间的转换
//数组转list Arrays.asList方法
String[] str={"penghui","xiaokeai","小胖子"};
//使用asList方法
List<String> strings = Arrays.asList(str);
System.out.println(strings.get(0));//输出测试
//但是需要注意的是,当数组转成集合后,集合不能做添加(add)和删除remove()操作,否则会报错
//解决办法
ArrayList<String> strings1 = new ArrayList<>(strings);//现在可以执行添加和删除操作了
strings1.remove(0);
//list转数组 lsit.toArray()
List<String> list=new ArrayList<>();
String[] strings2 = list.toArray(new String[list.size()]);
System.out.println(strings2);//测试
5 hashSet,TreeSet,linkedSet的区别
hashSet速度快
TreeSet内部自动排序,如以下代码
TreeSet treeSet=new TreeSet();
treeSet.add(23);
treeSet.add(1);
treeSet.add(54);
treeSet.add(66);
for (Object o:treeSet){
System.out.println(o);//输出的结果为 1 23 54 66
}
linkedList是插入的顺序集合,就使用linkedList
HashMap.TreeMap,linkedHashMap的区别
- 如果是对Map的插入,删除和定位元素,hashMap可能更好(key/value可以为null)
- 有排序的话,用TreeMap较好
- 如果是需要按顺序插入的存储集合,用LinkedHashMap更好
HashSet和HashMap的区别
HashMap | HashSet |
---|---|
实现了Map接口 | 实现了Set接口 |
HashMap储存键值对 | HashSet仅仅存储对象 |
使用put()方法添加 | 使用add()方法添加 |
HashMap中使用键对象来计算hashcode值 | HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false |
HashMap比较快,因为是使用唯一的键来获取对象 HashSet较HashMap来说比较慢
.Collections和Collection有什么区别
Collections是一个工具类,可以直接调用List和Set的方法
Collection是一个接口,是List和Set集合的父接口
写出Collections的6个方法,并详细解释
sort():对集合进行排序
shuffle():打乱集合中的元素顺序
addAll():将一个集合添加到另一个集合中
max():判断集合中的最大值
min():判断集合中的最小值
copy():将一个集合中的元素复制到另一个集合中去
fill():将一个集合中的元素全部替换成指定的元素
Conection的父接口是Iterable接口
Iterable接口可以拥有增强for循环,(foreach)
他的方法有
hashNext () :是否存在下一项
next();获取下一项
remove() 删除需要配合next()方法使用
Connection接口下面存在List Set 和Queue接口
list 特点:有序 可重复
list下面存在ArrayList和LinkedList
ArrayList 查询快 基于数组
LinkedList:增删改快,基于链表
Set的特点:无序 不可重复
HashSet :速度快,无序,只能存在一个null
TreeSet : 可以按升序保存对象
LinkedList: 按添加的顺序保存对象
Queue 队列 先进先出 (比如排队)
还有一个堆栈 先进后出 (比如堆沙子)
由Queue衍生出 Message 和looper(循环) 和handler