java集合

一.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的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值