@java集合
1
ArrayList和LinkList的区别
ArrayList(数组结构)
**优点**:get方法和set方法速度快,也就是查询速度快。
**缺点**:新数据的插入还有现有项的删除的效率不行
LinkList(链表结构)
**优点:**
新数据的插入和现有项的删除的效率快。
**缺点:**
对查询的速度就比较慢了。
代码测试
public void test(){
ArryList arryList=new ArrayList();
LinkedList Linked=new LinkedList();
//给每一个集合添加5000条数据
for(int i=0 ;i<5000;i++){
Object o=new Object();
// arrayList.add(0,o);//时间多
Linked.add(index:0,o)//时间少
}
long start=System.curntTimeMills();
fro(int i=0 ;i<Linked.size;i++){
//arrayList.get(i);
Linked.get(i);
}
long end=System.curntTimeMills();
System.out.println(“时长:”+(end-starts ));
}
**
Collection接口的remove()方法和Iterator接口的remove()方法区别?
**
**
①性能方面
**
Collection的remove方法必须首先找出要被删除的项,找到该项的位置采用的是单链表结构查询,单链表查询效率比较低,需要从集合中一个一个遍历才能找到该对象;
Iterator的remove方法结合next()方法使用,比如集合中每隔一项删除一项,Iterator的remove()效率更高
**
②容错方面
**
在使用Iterator遍历时,如果使用Collection的remove则会报异常,会出现ConcurrentModificationException,因为集合中对象的个数会改变而Iterator 内部对象的个数不会,不一致则会出现该异常
在使用Iterator遍历时,不会报错,因为iterator内部的对象个数和原来集合中对象的个数会保持一致
Array与ArrayList有什么区别
①Array是Java中的数组,声明数组有三种方式
int[] a=new int[10];
int a[]=new int[10];
int a[]={1,2,3,4};
可以看出:在定义一个数组的时候,必须指定这个数组的数据类型及数组的大小,也就是说数组中存放的元素个数固定并且类型一样
②ArrayList是动态数组,也就是数组的复杂版本,它可以动态的添加和删除元素,被称为”集合“,集合的声明如下
ArrayList list = new ArrayList(10);
ArrayList list1 = new ArrayList();
可以看出:在不使用泛型的情况下,这个list是可以添加进不同类型的元素的,而且arraylist是可以不用指定长度的。在使用泛型时,我们就只能添加一种类型的数据了
可以从三方面来描述集合
①.ArrayList是Array的复杂版本
②.存储的数据类型:Array只能存储相同数据类型的数据,而ArrayList可以存储不同数据类型的数据
③.长度的可变:Array的长度是固定的,而ArrayList的长度是可变的
4
怎样将一个数组转成List,有什么方法
数组转list,可以使用Arrays.asList(数组),例如
public void test2(){
String[] str={"zs","ww","ls"};
List<String> Strings=Arrays.asList(str);
//数组转换成list之后,list是不能进行add,remove等操作。
//如果需要进行这些操作,就需要
List<String> newStrings=new ArryList<Sting>(strings);
newString .add(“love");//像这种操作是可以的
}

List转数组,使用list.toArray(),例如
public void test3(){
List<Strng> str=ne ArrayList<>();
str.add("yes");
str.add("no");
str.add("ok");
String[] strings=str.toArray(new String[str.size]);
}

5
**
HashSet、TreeSet、LinkedHashSet区别?
**
可以从集合的使用场合回答面试官
①.需要速度快的集合,使用HashSet
②.需要集合有排序功能,使用TreeSet
③.需要按照插入的顺序存储集合,使用LinkedHashSet


6
**
HashMap、TreeMap、linkedHashMap区别?
**
可以从集合的使用场合回答面试官
①.在Map中插入、删除和定位元素,HashMap是最好的选择
②.需要集合有排序功能,使用TreeMap更好
③.需要按照插入的顺序存储集合,使用LinkedHashMap

7
**
HashMap和HashSet区别
**
HashMap HashSet
实现了Map接口
实现了Set接口
存储键值对
存储对象
调用put()向map中添加元素
调用add()向set中添加元素
HashMap使用key计算hashcode
HashSet使用成员对象计算hashcode
HashMap相对于HashSet较快,因为它是使用唯一的键获取对象
HashSet较HashMap来说比较慢
8
**
HashMap的实现原理
**
通过put和get存储和获取对象,存储对象时,我们将K/V传给put方法时,它调用hashcode计算hash从而得到bucket位置,进一步存储,HashMap会根据当前bucket的占用情况自动调整容量。获取对象时,我们将K传递给get,他调用hashcode计算hash从而得到bucket位置,并进一步调用equals()方法确认键值对。
9
**
List、Set、Map之间的区别
**
List和Set都继承Collection,但是Map不是Collection的子接口。
List
Set
Map
可以允许重复的元素
不允许重复元素
键值对存储,键必须唯一,但是值可以重复
可以插入多个null元素
只允许一个null元素
键只允许一个null,
值可以允许有多个null
有序的容器,插入的顺序和输出的顺序一样
无序容器
无序容器