黑马程序员技术交流社区
标题: 【阳哥专栏】周末技术分活动第6期 [打印本页]
作者: 王震阳老师 时间: 2014-7-26 21:42
标题: 【阳哥专栏】周末技术分活动第6期
本帖最后由 就业指导-王震阳老师 于 2014-8-18 11:08 编辑
活动目的:练习javaSE知识,理解JavaSE底层数据结构。
活动奖励:最高3个技术分
结束时间:2014年7月27日,过期提交可能获取不到技术分!
代码提交要求:将自己的源代码压缩然后提交,提交的时候设置为管理员权限,以其他方式提交的答案无效。上交源码的时候不需要将整个工程项目压缩,只需将用到的源文件压缩即可。
题目类型:JavaSE底层数据结构。
题目:老规矩,回帖领题
更多技术分活动:
【阳哥专栏】技术分活动第12期
http://bbs.itheima.com/thread-138162-1-1.html
【阳哥专栏】技术分活动第11期
http://bbs.itheima.com/thread-137632-1-1.html
【阳哥专栏】技术分活动第10期
http://bbs.itheima.com/thread-136866-1-1.html
【阳哥专栏】技术分活动第9期
http://bbs.itheima.com/thread-136465-1-1.html
【阳哥专栏】技术分活动第8期
http://bbs.itheima.com/thread-135781-1-1.html
【阳哥专栏】技术分活动第7期
http://bbs.itheima.com/thread-134321-1-1.html
【阳哥专栏】周末技术分活动第6期
http://bbs.itheima.com/thread-132893-1-1.html
【阳哥专栏】周末技术分活动第5期
http://bbs.itheima.com/thread-129859-1-1.html
【阳哥专栏】周末技术分活动第4期
http://bbs.itheima.com/thread-128854-1-1.html
【阳哥专栏】周末技术分活动第3期
http://bbs.itheima.com/thread-127326-1-1.html
【阳哥专栏】周末技术分活动第2期
http://bbs.itheima.com/thread-125800-1-1.html
【阳哥专栏】周末技术分派送活动第1期
http://bbs.itheima.com/thread-123979-1-1.html
作者: 郭可 时间: 2014-7-26 22:04
虽然面试完了,但是基础不能落下
作者: 郭可 时间: 2014-7-26 22:16
阳哥我收到录取通知书了,希望这能是人生的新起点。
作者: 王震阳老师 时间: 2014-7-26 22:17
还挺快。恭喜你了。接下来4个半月就是艰难的时光了。
作者: 八零、玖羚 时间: 2014-7-26 22:53
回帖领题
作者: 晏敏 时间: 2014-7-26 23:16
看看题目
作者: 谢振宣 时间: 2014-7-26 23:19
本帖最后由 谢振宣 于 2014-7-27 03:40 编辑
看看题目。。。不太好做啊,暂时只能做到这样了,提交
-
-
Demo.rar
940 Bytes, 阅读权限: 100, 下载次数: 1
作者: 嘻嘻哈哈嘻嘻 时间: 2014-7-26 23:40
我要做题
作者: 执笔梦 时间: 2014-7-26 23:44
看看......
作者: 小乖乖灬浩歌 时间: 2014-7-27 00:26
领题 先看看
作者: 醉、倾鯎 时间: 2014-7-27 01:07
题目是啥子呦~
作者: 刘高峰 时间: 2014-7-27 02:34
看看题目
作者: shijianws 时间: 2014-7-27 04:15
看看题目
作者: X11 时间: 2014-7-27 06:38
继续赚技术分!加油
作者: 遗失的美好YXJ 时间: 2014-7-27 07:05
拿题.............
作者: 吴杰栋 时间: 2014-7-27 08:13
拿个题目
作者: 曲佳奇 时间: 2014-7-27 09:18
看看题..
作者: 奋斗的小耗子 时间: 2014-7-27 09:30
领题
作者: 玉冰竹 时间: 2014-7-27 10:34
回帖领题
作者: FireWater 时间: 2014-7-27 10:45
领题赚技术分
作者: 土突突 时间: 2014-7-27 10:58
来看下会不会
作者: idency 时间: 2014-7-27 11:03
拿题领分
作者: 菜鸟一号 时间: 2014-7-27 11:18
先领题目,不解释:P
作者: 李彦来 时间: 2014-7-27 11:20
看一下下
作者: 曲佳奇 时间: 2014-7-27 11:31
是不是这个意思?
-
-
答案.rar
595 Bytes, 阅读权限: 100, 下载次数: 1
作者: sugar 时间: 2014-7-27 12:10
来领题了
作者: chen010yu 时间: 2014-7-27 13:46
过来拿技术分的
作者: Franklin 时间: 2014-7-27 13:50
我来参与
作者: cyc52tjm 时间: 2014-7-27 14:48
拿技术分,看看题目
作者: 洛漠O_o 时间: 2014-7-27 14:54
为了技术分,拼了
作者: FireWater 时间: 2014-7-27 16:04
总算写完了,请老师批阅
-
-
JavaConstructorDemo.zip
3.75 KB, 阅读权限: 200, 下载次数: 1
作者: sugar 时间: 2014-7-27 16:29
新建 Microsoft Word 文档.zip
(5.46 KB, 下载次数: 1)
作者: 刘亚东 时间: 2014-7-27 16:41
回帖领题
作者: X11 时间: 2014-7-27 17:09
继续学习,赚取技术分。
-
-
Test.zip
154 Bytes, 阅读权限: 200, 下载次数: 2
作者: ddewym123 时间: 2014-7-27 18:25
领题~领题~
作者: 2528870651 时间: 2014-7-27 18:38
技术分 来了
作者: KurtCobin 时间: 2014-7-27 19:12
赚分啦!
作者: 教皇 时间: 2014-7-27 21:21
领题,看看。。
作者: w306752855 时间: 2014-7-27 22:37
是不是来晚了!
作者: flyidea 时间: 2014-7-27 23:11
来瞅瞅什么题目。
作者: 你好吗 时间: 2014-7-27 23:22
来迟了,还差技术分,老师还是先给题吧
作者: 胥亮 时间: 2014-7-28 12:56
看看题目
作者: adent 时间: 2014-7-28 15:49
来看的时候居然 过期了。。
作者: 李小新H 时间: 2014-7-28 17:47
回帖领题
作者: liuniansis 时间: 2014-7-28 17:54
领题一份,谢谢:lol
作者: huangxuanheng 时间: 2014-7-29 00:05
回帖领题
作者: Stevenj 时间: 2014-7-29 10:07
辛苦了,阳哥 !
作者: 王震阳老师 时间: 2014-7-29 15:27
写的很好,还有自己的分析比较。推荐为参考答案。满分!
- package cn.itcast.heima;
- import java.util.AbstractSet;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Set;
- /*
- * 题目:
- * 通过查看源码、百度等多种手段学习并理解JavaSE中String、StringBuilder、ArrayList、HashSet等底层数据结构。
- * 要求将每个底层数据结构整理成一段文字并提交(对每个数据结构都能说出详细的原理则可获取满分)。
- *
- */
- public class JavaConstructorDemo {
- public static void main(String[] args) {
- //各个类的底层结构见方法体
- StringDemo();
- StringBuilderDemo();
- ArrayListDemo();
- HashSetDemo();
- }
- private static void StringDemo() {
- /* String类是java.lang包中的方法,直接继承Object类,它所实现的接口有Serializable, CharSequence, Comparable<String>
- * public final class String extends Object implements Serializable, Comparable<String>, CharSequence
- * String类代表字符串,不可被继承。Java中所有的字符串面值都作为此类的实例实现。
- * 字符串是常量,它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为String对象是不可变的,所以可以共享。
- * String类型是可序列化的,可比较的字符序列。
- * String.class中的序列号如下private static final long serialVersionUID = -6849794470754667710L;
- * 再看一下String类中定义的几个基本field
- *
- private final char value[]; String的值,String的本质就是char型数组
- private final int offset; 子数组第一个字符的索引
-
- private final int count; 字符串中的字符数量
- private int hash; 对象的hash code
- *
- * 经过上面的分析,其实我们已经能看出String对象的本质是一个经过封装的char型数组,封装后提供了一些方便操作的方法。
- */
-
- }
- private static void StringBuilderDemo() {
- /*
- * java.lang.StringBuilder
- * public final class StringBuilder extends AbstractStringBuilder
- * implements Serializable, CharSequence
- * StringBuilder继承Object类,不能被继承,与String相比没有实现Comparable接口。
- * StringBuilder是一个可变字符序列。一个类似于String的字符串缓冲区,不能被修改,
- * 但通过默写方法调用可以改变该序列的长度和内容,与StringBuffer相比StringBuilder不同步,
- * 在大多数视线中比StringBuffer要快。
- * StringBuilder.class中的构造函数构造了一个不带字符的字符缓冲区,初始容量为16个字符
- * public StringBuilder() {
- super(16);
- }
- * StringBuilder内部也是一个char数组,这和String内部的存储实现无异,但是StringBuilder的对象可变,与String相比
- * 不用每次创建新对象,效率高。
- *下面举例说明效率差别:
- *
- */
- String s = "";
- long begintime = System.currentTimeMillis();
- for (int i = 1; i <=10000; i++) {
- s+=i;
- }
- long endtime =System.currentTimeMillis();
- long time =endtime-begintime;
- System.out.println("String方法运行时间:"+time);
- //----------------------------------------
- StringBuilder s1 =new StringBuilder();
- s="";
- begintime =System.currentTimeMillis();
- for(int i =1;i<=10000;i++)
- {
- s=""+i;
- s1 = new StringBuilder(s);
- }
- endtime =System.currentTimeMillis();
- time = endtime-begintime;
- System.out.println("StringBuilder运行时间为:"+time);
-
- }
-
- private static void ArrayListDemo() {
- /*
- * public class ArrayList<E>extends AbstractList<E>
- * implements List<E>, RandomAccess, Cloneable, Serializable
- *ArrayList 继承了AbstractList,这个抽象类继承至AbstractCollection,AbstractCollection更像是实现List,Set共同的方法,
- *而AbstractSet、AbstractList更像是提供给Set、List各自特有方法的实现。
- *ArrayList是List接口的大小可变数组的实现。 允许包括null在内的所有元素,除了实现List接口外,此类还提供一些
- * 方法来操作内部用来出村列表的数组的大小,此方法是不同步的,ArrayList替代了Vector
- * 源码中
- private static final long serialVersionUID = 8683452581122892189L;
- 用于标识序列号
- * private transient Object elementData[];
- * 可以看到ArrayList就是一个数组
- * private int size;
- 该列表的大小,也就是元素个数。
- *public ArrayList(int initialCapacity) {
- super();
- if (initialCapacity < 0)
- throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);
- this.elementData = new Object[initialCapacity];
- }
- 构造函数,初始化内部数组为指定大小,列表是空的。
- * public ArrayList() {
- this(10);
- }
- 默认初始话内部数组大小为10
- ArrayList作为数组其查询速度很快 ,因为创建一个数组的时候 ,会在内存中分配一段
- 地址连续的空间,数组名就是这块内存空间的首地址。数组查询时直接找到对应数组名指向的内存空间首地址,
- 查询速度很快。如果根据内容查找Arraylist提供了一些遍历数组查找元素迭代方法 。
- 简单来说 ,ArrayList就是数组的一个封装类
-
- *
- */
-
- }
-
- private static void HashSetDemo() {
- /*
- * public class HashSet<E>
- extends AbstractSet<E>
- implements Set<E>, Cloneable, java.io.Serializable
- * HashSet继承AbstractSet,AbstractSet继承AbstractCollection这里不做重复。
- * 通过源码可以看出Set提供的方法和Collection指定的方法完全一样。具体区别要从
- * HashSet和TreeSet中体现。
- * private transient HashMap<E,Object> map;
- private static final Object PRESENT = new Object();
- * 从HashSet定义的属性可以看出HashSet底层是使用HashMap实现的,HashMap基于哈希表,
- * 存储键值对,key不能相同,保证了元素的不重复。PRESENT属性是一个Object对象,且是
- * static和final的,它的用途就是当做Value存进map中
- * 构造方法一:调用默认的HashMap构造方法初始化map
- * public HashSet() {
- map = new HashMap<E,Object>();
- }
- * 构造方法二:根据给定的Collection参数调用HashMap(int initialCapacity)的构造方法创建一个HashMap,
- * 调用addAll方法将c中的元素添加到HashSet对象中
- * public HashSet(Collection<? extends E> c) {
- map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
- addAll(c);
- }
- * 构造方法三:构造一个指定初始化容量和负载因子的HashMap
- public HashSet(int initialCapacity, float loadFactor) {
- map = new HashMap<E,Object>(initialCapacity, loadFactor);
- }
- * 构造方法四:构造一个指定初始化容量的HashMap
- public HashSet(int initialCapacity) {
- map = new HashMap<E,Object>(initialCapacity);
- }
- *构造方法五:构造一个指定初始化容量和负载因子的LinkedHashMap
- *dummy参数被忽略,只是用于区分其他的,包含一个int、float参数的构造方法
- HashSet(int initialCapacity, float loadFactor, boolean dummy) {
- map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
- *
- * hash算法的功能:
- * 保证通过一个对象快速找到另一个对象;其算法价值体现在速度,可以保证查询快速执行;
- * 当从HashSet 中访问元素时,HashSet先计算该元素的hashCode(也就是该对象的hashCode方法返回值),
- * 然后直接到该HashCode对应的位置取出该元素; 在这里对象的hashCode就好比是数组里的索引,但是不是索引
- *
- * HashSet元素添加:
- * 当向HashSet集合中存入一个元素是,HashSet会调用该对象的HashCode()方法来得到该对象的hashCode值,
- * 判断已经存储在集合中的对象的hashCode值是否与添加的对象的hashCode值一致:若不一致,直接添加进去;
- * 若一致,再进行equals方法比较,equals方法如果返回true,表明对象已经添加进去了,就不会添加新的对象了,否则添加进去;
- * 如果我们重写了equals方法,也要重写hashCode方法,反之亦然。
- * HashSet集合判断连个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode方法返回值也相等。
- * 如果需要某个类的对象保存到HashSet集合中,覆写该类的equals()和hashCode()方法,应该尽量保证两个对象通过equals比较返回true时,他们的hashCode返回也相等。
- * 下例为HashSet功能实现
- *
- */
- Set s = new HashSet();
- s.add(new PersonDemo("王老吉"));
- s.add(new PersonDemo("王老吉"));
- s.add(new PersonDemo("王老吉"));
- System.out.println(s);
- }
- }
- class PersonDemo{
- private String name;
- public PersonDemo(String name){
- super();
- this.name= name;
- }
- public String toString(){
- return "name="+name;
- }
- public int hashCode(){
- final int prime= -31;
- int result =1;
- result = prime*result+((name==null)? 0:name.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj){
- if(this==obj)
- return true;
- if(obj ==null)
- return false;
- if(getClass()!=obj.getClass())
- return false;
- PersonDemo other = (PersonDemo)obj;
- if(name ==null){
- if(other.name!=null)
- return false;
- }else if(!name.equals(other.name))
- return false;
- return true;
-
- }
-
- }
复制代码
作者: X11 时间: 2014-7-29 16:13
老师,非常抱歉。可能压缩的时候出了问题,我重新压了一份。
-
-
Test.zip
1.1 KB, 阅读权限: 200, 下载次数: 1
作者: lpc4276139 时间: 2014-7-29 19:44
我是不是错过了什么
作者: 曲佳奇 时间: 2014-7-29 20:48
写的好全啊..
作者: 蔡爽 时间: 2014-7-30 07:49
路过看看,好像时间错过了
作者: 转身 时间: 2014-7-30 13:17
来领题了
作者: tonglingwang 时间: 2014-7-30 17:32
来领题了
作者: 唕 时间: 2014-7-30 18:23
路过 注水 。
作者: ljl623786058 时间: 2014-7-30 21:10
基础还是相当重要的
作者: 13155155528 时间: 2014-7-30 22:17
回帖 看题
作者: 小乖乖灬浩歌 时间: 2014-7-31 10:00
阳哥 本周的为何还不出来?
作者: 晓_猪 时间: 2014-8-2 22:41
我看看!!!!
作者: yqj 时间: 2014-8-3 11:34
看看题目
作者: 晓之飞 时间: 2014-8-6 15:20
看看题目
作者: 冒牌高手 时间: 2014-8-6 15:34
看看题目
作者: justin1258 时间: 2014-8-6 17:13
阳哥多搞点技术分活动...{:3_65:}
作者: justin1258 时间: 2014-8-6 20:07
再多一次呗~~~:P
作者: xiong910627 时间: 2014-8-18 13:58
是什么题目。。。。。。。。。
作者: 嘿~~ 时间: 2014-8-18 17:41
:lol我要领题,我要技术分
作者: 潘多拉 时间: 2014-8-19 14:00
阳哥好,看看题喽,想进黑马
作者: 王震阳老师 时间: 2014-8-19 14:13
欢迎,把基础打牢是第一步。
作者: shuimu_88 时间: 2014-8-19 19:49
拿题拿题
作者: 会飞De石头 时间: 2014-8-20 13:56
看题 做题 巩固基础
作者: 依然超级赛亚人 时间: 2014-8-21 07:36
来领份题目去看看,阳哥辛苦!
作者: kizzle 时间: 2014-8-21 08:22
来拿题目了
作者: 付江涛 时间: 2014-8-23 20:29
{:3_46:}看看这道
作者: 大山 时间: 2014-8-24 00:19
多看一些题
作者: Baiye 时间: 2014-8-24 15:23
回帖拿题
作者: Huberry 时间: 2014-8-24 15:23
回帖领题
作者: Baiye 时间: 2014-8-24 22:17
请老师查看
-
-
数据结构.zip
8.54 KB, 阅读权限: 200, 下载次数: 1
作者: 彭彪 时间: 2014-8-25 09:37
回帖看看。。。
作者: 地狱天堂 时间: 2014-8-25 17:25
回帖领题
作者: yingsun 时间: 2014-9-2 03:05
终于看到一道会做的。
作者: Mokill0911 时间: 2014-9-2 06:04
回帖领题
作者: daoqin 时间: 2014-9-17 09:09
我来试试看!
作者: 一苇芦江 时间: 2014-9-17 10:06
新手领题了,
作者: daoqin 时间: 2014-9-17 12:02
觉得这个题目对我的基础学习有帮助,就先做这个了花了一个早上的时间,看源码,查文档,因为这个不涉及写代码,就自己做了一个总结,请查收:
-
-
查看地址.rar
228 Bytes, 阅读权限: 150, 下载次数: 1
作者: li963309584 时间: 2014-9-17 12:24
领题,谢谢
作者: xpaibeyond 时间: 2014-9-18 01:16
领题了。。
作者: 追逐我的明天 时间: 2014-9-21 21:15
领题来了
作者: @for 时间: 2014-9-23 01:15
看看什么数据结构
作者: zhumy111 时间: 2014-9-23 15:38
领题来了
作者: 梦璇 时间: 2014-9-25 16:14
看看题目
作者: 家进 时间: 2014-9-26 12:05
我的数据结构有点弱。还是看看吧
作者: 水竹 时间: 2014-10-6 23:09
回帖看题
作者: 油油油菜花 时间: 2014-10-9 10:44
继续!!
作者: 小刺风 时间: 2014-10-9 11:55
领一下题
作者: Memory`_禁 时间: 2014-11-20 01:06
灵体,领题
作者: dhysh5512176 时间: 2014-11-28 22:52
继续努力工作
作者: 骑着乌龟去旅行 时间: 2014-11-29 00:01
哎,好无语
作者: 骑着乌龟去旅行 时间: 2014-11-29 00:02
哎。。。。。好无语
作者: jinjiamao 时间: 2014-12-1 21:39
领题!!!领题!!!
作者: 渐行渐远 时间: 2014-12-3 08:09
领个题
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |