欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java从0开始学习第九课--集合是程序员是基本素养(2)

程序员文章站 2024-03-19 18:27:28
...

     好,我们讲完了一些虚的概念,直接来搞些实的玩意,我相信大家看完我这篇文章,并且按照我的例子都跑了一遍之后,会发现自己原来是多么的牛逼!!!

 

 我们先从最常用的list说起吧,我们先学一个方法:add方法,我们通过一个小程序来看看,arrayList,linkedlist,vector到底谁是博尔特!我们直接看代码吧,代码非常非常简单,就是同时执行

1000000次的添加动作,谁用的时间少,谁最快。let's go!

public class Test {	
	public static void main(String[] args) {
		int times=1000000;
		arrayList(times);
		//linkedList(times); 
		//vector(times);
	}
	
	
	private static void arrayList(int times){
		Date begin=new Date();
		List arrayList=new ArrayList<Object>();
		for(int i=0;i<times;i++){
			arrayList.add(new Object());
		}
		Date end=new Date();
		double time=end.getTime()-begin.getTime();
		System.out.println("arrayList先生花了:"+time);
	}
	
	private static void linkedList(int times){
		Date begin=new Date();
		List linkedList=new LinkedList<Object>();
		for(int i=0;i<times;i++){
			linkedList.add(new Object());
		}
		Date end=new Date();
		double time=end.getTime()-begin.getTime();
		System.out.println("linkedList先生耗时:"+time);
	}
	
	private static void vector(int times){    
		Date begin=new Date();
		List vector=new Vector<Object>();
		for(int i=0;i<times;i++){
			vector.add(new Object());
		}
		Date end=new Date();
		double time=end.getTime()-begin.getTime();
		System.out.println("vector先生用了:"+time);
	}
}

 

 

   由于他们一起跑会出现资源分配不均匀的问题(只有1条跑道,会拥挤),我们分别跑他们(一次跑一个,把另外2个注释掉)。结果为:

linkedList先生耗时:1355.0

vector先生用了:78.0

arrayList先生花了:47.0

   没有错,arraylist是百米冠军,不过他领先第二名vector先生并不多,可能vector先生今天状态不好,大家多跑几次会发现有时候是vector先生胜出的。但是,他们是遥遥得把linkedlist先生甩到了脑后。

  原来是这样的,vector,ArrayList是基于动态数组的,LinkedList基于链表的。我们用脚指头想一下,链表是什么的东西?


java从0开始学习第九课--集合是程序员是基本素养(2)
   所以,在末尾添加一个d的时候,首先要把c的信息放到d的车头,然后把d的信息放到c的车尾,能不慢吗?

   但是,这意味着获取中间元素或者删除修改某个元素的时,linkedlist的速度要比其他两个都快。

 

       我这么幸苦画图,大家能不能在留言区赞美我两句?

 

      然后有一点很重要,这个vector的实现机制跟List是一样的,但是人家vector是线程安全的,这一点,关于线程安全,以后再讲。

 

接下来,我们讲一下list的一些重要的招式,依然会非常非常爽,大家打开你的eclipse跟着我左手右手一个慢动作···

 

第一个动作:添加 add,上面已经有了,不再啰嗦

第二个动作:删除 remove,可以删除某个位置的元素,也可以直接删除某个元素,不清楚?看代码!!

	public static void main(String[] args) {
		List list=new ArrayList<String>();
		String a="1.你好啊大神!";
		String b="2.你好啊小鬼!";
		String c="3.给个评论呗?";
		String d="4.滚····";
		list.add(a);
		list.add(b);
		list.add(c);	
		list.add(d);
		System.out.println("一开始是这样的:"+list.toString());
		list.remove(2);
		System.out.println("remove(2)之后呢:"+list.toString());
		list.remove(b);
		System.out.println("reomver(a)之后就:"+list.toString());
		list.removeAll(list);
		System.out.println("removeAll就是:"+list.toString());
	}

 

一开始是这样的:[1.你好啊大神!, 2.你好啊小鬼!, 3.给个评论呗?, 4.滚····]

remove(2)之后呢:[1.你好啊大神!, 2.你好啊小鬼!, 4.滚····]

reomver(a)之后就:[1.你好啊大神!, 4.滚····]

removeAll就是:[]

 

第三个动作:获取长度,size

第四个动作:获取第几个元素 list.get(i);这个方法相当相当常用,我们可以用来遍历list,来我们一起来搞一波!!兄弟们,一定要多敲代码,只有多干,才能够泡到白富美(````),如果已经泡到了,更应该多干····

 

public static void main(String[] args) {
		List<String> list=new ArrayList<String>();
		String a="1.你好啊大神!";
		String b="2.你好啊小鬼!";
		String c="3.给个评论呗?";
		String d="4.滚····";
		list.add(a);
		list.add(b);
		list.add(c);
		list.add(d);
		
		System.out.println(list.size());
	    for(int i=0;i<list.size();i++){
	    	String str=list.get(i);
	    	System.out.println("第"+i+"个元素是:"+str);
	    }
	}
 list的其他方法,我就不讲了,大家有兴趣可以去看看。现在我们要讲Map了,这个Map也是非常常用的,面试也是屡屡问到。我们先来讲一下什么map,有同学问这是地图的意思,难道大佬琛今天要给我们讲怎么做地图软件吗?我上去就是一巴掌! map,在java中,不是地图,而是,传说中的键值对。大家看我这句代码:

 

 Map map=new HashMap();

map.put("name","大佬琛");

map.put("age","18");

大家看到没有,这个就是咱们的map类,可以用来存放多个资料,但是不能重复,如果我再加一条

map.put("age","17");那么就会把之前的18岁给覆盖掉了。哎呀,一不小心就暴露了人家的年龄··

   我们先看看map一些操作,尤其是遍历map,大家可以认真学一下,很给力

 

 

		Map map= new HashMap();
		map.put("a", "我要升职加薪");
		map.put("b", "出任ceo");
		map.put("c", "迎娶白富美");
		map.put("d", "走向人生的巅峰");
		map.put("d", "走向人生的巅峰2");
		for(Object obj : map.keySet()){   //遍历map
		  Object value = map.get(obj );
		  System.out.println(value);
		}
		System.out.println(map.containsKey("a"));//有没有该key
		System.out.println(map.containsValue("出任ceo"));//有没有该value
		System.out.println(map.isEmpty());//是不是空的
		System.out.println(map.size());//map里有多少个元素
		System.out.println(map.remove("c"));//删掉key=c的元素
		System.out.println(map.size());
   运行结果是这样的:

 

 

走向人生的巅峰2
出任ceo
迎娶白富美
我要升职加薪
true
true
false
4
迎娶白富美
3
 我们可以看到,第一遍历并显示的时候,他是无序的,所以,大家记住一点,map是无序的,还有map中很重要的一个知识点,大家要了解一下 :hashmap和hashtable的区别:千万要记住哦,不记住的话,要打屁股的哦···

 

 

1、hashtable是同步的(线程安全),hashMap不是,性能上hashmap会好,但是hashtable可以处理多线程问题

2、hashmap运行出现为null的key(空键值),hashtable不可以

3、Hashtable 继承自 Dictiionary 而 HashMap继承自AbstractMap
 

 

好了,讲完了list,map,我们还有一个set,就能把集合收尾了,这个set也没什么可说的,主要有一点,

 

 

Set最大的特性就是不允许在其中存放的元素是重复的。
 

 

所以,我们通常把map的key存放在set中,而上面的代码中,我们其实已经用到了set,map.keySet()这个方法恰好返回的是set对象。

 

 

 

 

相关标签: Java集合