一.arrayList与Linklist的比较
// 比较ArrayList和LinkList执行效率
List arrayList=new ArrayList<>();
long startTime= System.currentTimeMillis();
for(int i=0;i<1000000;i++)
{
arrayList.add(i);
}
long endTime= System.currentTimeMillis();
for(int i=0;i<1000000;i++)
{
arrayList.get(i);
}
long getEndTime= System.currentTimeMillis();
System.out.println(“ArrayList设置数据的时间差:”+ (endTime-startTime));
System.out.println(“ArrayList读取数据的时间差:”+ (getEndTime-endTime));
long startTime22= System.currentTimeMillis();
List linkedList=new LinkedList<>();
for(int i=0;i<1000000;i++)
{
linkedList.add(i,i);
}
long endTime22= System.currentTimeMillis();
for(int i=0;i<1000000;i++)
{
arrayList.get(i);
}
long getEndTime22= System.currentTimeMillis();
System.out.println(“Linklist设置数据的时间差:”+ (endTime22-startTime22));
System.out.println(“linkList读取数据的时间差:”+ (getEndTime22-endTime22));
// 删除数据时间差
long removeStartTime= System.currentTimeMillis();
for(int i=100;i<10000;i++)
{
arrayList.remove(i);
}
long removeEndTime= System.currentTimeMillis();
System.out.println(“ArrayList删除数据的时间差:”+ (removeEndTime-removeStartTime));
long removeStartTime2= System.currentTimeMillis();
for(int i=100;i<10000;i++)
{
linkedList.remove(i);
}
long removeendTime22= System.currentTimeMillis();
System.out.println(“Linklist删除数据的时间差:”+ (removeendTime22-removeStartTime2));
通过执行时间对比发现:
1.Arraylist设置数据比Linklist快
2.Arraylist读取数据和Linklist差不多,数据量大的情况下可能才能看出结果
3.Arraylist删除数据比Linklist慢
总结:
ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
另外ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。
二,hashmap 和hashSet的区别
先上代码
HashMap hashMap=new HashMap();
HashSet hashSet= new HashSet();
hashMap.put(“1”,1);
hashMap.put(“1”,1);
hashMap.put(null,1);
System.out.println(hashMap.size());
System.out.println(hashMap.get(null));
System.out.println(hashMap.get(“1”));
for(int i=0;i<1000;i++){
hashSet.add(Integer.toString(i));
}
hashSet.add(“222”);
hashSet.add(“111”);
System.out.println(hashSet.size());
System.out.println(hashSet.contains(“222”));
System.out.println(hashSet.toArray()[10]);
System.out.println(hashSet.toArray()[30]);
System.out.println(hashSet);
TreeSet treeSet=new TreeSet<Integer>();
for(int j=0;j<100;j++)
{
treeSet.add(j);
}
System.out.println(treeSet);
System.out.println(treeSet.toArray()[20]);
TreeSet treeSet2=new TreeSet<>();
treeSet2.add("A");
treeSet2.add("B");
treeSet2.add("D");
treeSet2.add("C");
treeSet2.add("33");
System.out.println(treeSet2);
System.out.println(treeSet2.toArray()[1]);
通过上面的执行结果看出:
hashMap数据格式是key value形式,不能保存重复数据(代码中添加了两次hashMap.put(“1”,1))但是长度还是2,可以允许有null值,可以通过get获取数据
hashSet仅存储对象,也不允许重复的数据出现,且存储是无序的
treeset是有序的
三 hashmap与hashtable
同样的元素添加执行时间差
hashMap添加元素时间172
hashtable添加元素时间229
hashmap删除元素时间22
hashtable删除元素时间19
差异:
1.Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。
2.Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的