好,我们讲完了一些虚的概念,直接来搞些实的玩意,我相信大家看完我这篇文章,并且按照我的例子都跑了一遍之后,会发现自己原来是多么的牛逼!!!
我们先从最常用的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基于链表的。我们用脚指头想一下,链表是什么的东西?
所以,在末尾添加一个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程序员的基本修养》是李刚老师撰写的一本针对Java编程的深度学习书籍,旨在提升程序员的专业素养和技能水平。这本书的源代码包含了书中所讲解的各种编程实例,旨在帮助读者更好地理解和应用Java语言,加深...
《疯狂Java:突破程序员基本功16课》是一本针对Java程序员进阶的教程,旨在提升读者在编程领域的技能和专业素养。这本书结合了理论与实践,通过16个关键课程,深入讲解了Java编程的核心概念和技术。源代码的提供使得...
《JAVA程序员面试宝典》第四版是为Java开发者准备的一本详实的面试指南,尤其适合准备面试的求职者和想要提升技术素养的在职人员。2015年的版本更新了当时的前沿技术和最佳实践,旨在帮助读者掌握Java编程语言的核心...
【JAVA程序员面试考题精选】是一份集合了Java程序员面试常见问题与答案的资源,针对的是正在准备Java面试的开发者。这份资料分为两大部分:第一部分涵盖了1到87道面试题,第二部分包含了88至122道题目,旨在帮助求职...
Java程序员面试技巧是每个寻求职业发展的开发者都需要掌握的关键技能。面试不仅是展示专业能力的平台,也是展现个人素养和职业态度的窗口。以下是针对Java程序员面试的一些核心要点: 1. **简历准备**:简历是面试...
1. **基础技术掌握**:Java程序员的基础技能包括Java语法、面向对象编程(OOP)、异常处理、集合框架(List, Set, Map等)、多线程、I/O流、网络编程等。面试官可能通过设计简单的代码问题来测试这些基础知识。 2. ...
《Java课程设计电子版(第二版)耿祥义》是一本深入浅出的Java编程教程,专为初学者和有一定基础的学习者设计。作者耿祥义以其丰富的教学经验,将复杂的编程概念以易于理解的方式呈现出来,使得读者能够快速掌握Java...
根据给定的“09年程序员考试大纲”的文件信息,我们可以从中提炼出多个与程序员考试相关的知识点。这些知识点覆盖了理论基础、编程语言、数据库管理等多个方面,旨在全面考察考生的专业技能。 ### 1. 计算机基础...
【Java达内面试题库】是专门为准备Java程序员面试者设计的一份综合性的题库,旨在帮助应聘者全面了解和掌握Java技术领域的核心知识点。这份题库覆盖了Java语言的基础到高级各个方面,对于想要在面试中脱颖而出的Java...
《剑指Offer第二版》是深受程序员喜爱的面试准备书籍,它涵盖了众多经典的编程题目,旨在提升面试者在算法、数据结构以及问题解决能力上的素养。这个Java代码集合显然是作者根据书中的题目,用Java语言编写的不同...
【描述】中的“广东省珠海市第一小学”表明这所学校的教育理念与时俱进,开设了Java兴趣班,让学生在基础教育阶段就有机会接触编程,这对于培养学生的逻辑思维能力和创新意识有着积极的推动作用。而“java兴趣班3...
在程序员的面试过程中,自我介绍不仅仅是简单地介绍个人背景,更是一个展示技术能力、解决问题思路和专业素养的机会。以下是一些关键知识点的详细解释: 1. 关键字 final, finally, finalize 的区别: - final:...
在Java开发领域,面试是检验一个程序员技能和知识的关键环节。为了在面试中脱颖而出,你需要对Java语言有深入的理解,并具备解决实际问题的能力。以下是一些核心的Java知识点,这些都是面试官经常关注的要点,同时也...
【标题】:“程序员深圳面试题大全(.NET and JAVE)”所涵盖的知识点解析 在.NET与Java这两个主流的开发平台上,程序员的面试题通常会...通过深入学习和实践,可以增强程序员的专业素养,为职场发展打下坚实的基础。
"程序员面试攻略加面试宝典"集合了最全面的面试准备资料,旨在帮助求职者们更好地应对技术面试,提升成功入职的可能性。下面,我们将深入探讨其中可能包含的重要知识点: 1. **编程语言基础**:无论你是一名Java、...
Java面试题涵盖了许多核心概念,包括语言特性、类与对象、集合框架、异常处理和内存管理。以下是对这些知识点的详细解释: 1. **final, finally, finalize的区别**: - `final` 关键字用于声明变量、方法或类,...
Java面试和笔试题涵盖了许多核心概念,这些都是评估Java开发者技能的关键点。让我们深入探讨一下这些题目涉及的关键知识点: 1. **final, finally, finalize的区别**: - `final` 关键字用于声明变量、方法或类,...
2. **环境搭建**:学习Java的第一步通常是安装Java Development Kit (JDK),配置好Java环境变量,包括JAVA_HOME、PATH和CLASSPATH。 3. **基本语法**:Java的源代码文件以.java为扩展名,通过编译器javac将.java...