第23次(容器)

学习主题:容器

学习目标:

1. 掌握Vector,以及与ArrayList的区别

2. 掌握Map接口下的HashMap和HashTable

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应作业:

1. Vector用法和ArrayList区别

(1) Vector的特有方法有哪些?

答:public void addElement(E obj)//将指定的组件添加到此向量的末尾

public E elementAt(int index)//返回指定索引处的组件

public Enumeration<E>elements()//返回此向量的组件的枚举

(2) Vector与ArrayList的区别是什么?

答:需要线程安全时,使用Vector。不存在线程安全问题时,并且查找较多时用ArrayList。

2. Map接口_HashMap_Hashtable的用法详解

(1) Map接口常用的方法有哪些?

(2) HashMap与Hashtable的异同是什么?

答:HashMap采用哈希算法实现,是Map接口岁常用的实现类。由于底层采用了哈希表存储数据,要求键不能重复,如果发生重复,新的键值对会替换旧的键值对。

而HashTable类和HashMap用法几乎一样,底层实现几乎一样,但是HashTable的方法添加了synchronized关键字确保线程同步检查,效率较低。

HashMap: 线程不安全,效率高。允许key或value为null。

HashTable: 线程安全,效率低。不允许key或value为null。

3. HashMap的底层原理

(1) HashMap的底层数据结构是什么?

答:哈希表

(2) 简述哈希表的去重原理?

答:如果对应的位置有Node,Node是一个链表结构。然后比较链表的第一个元素,比较方式使用的是p.hash == hash &&((k = p.key) == key || (key != null && key.equals(k))),hash值相等,并且key是同一个或者equals的时候才认为是相同。如果相同,记为e

第24次(容器)

学习主题:容器

学习目标:

1 掌握二叉树和红黑树

2 掌握TreeMap

3 掌握Set接口下的HashSet和TreeSet

4 掌握泛型

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应作业

1. 二叉树和红黑树

(1) 简述树的概念和特征?

答:树(Tree)是n(n>=0)个结点的有限集:,n=0时称为空树,树的概念即递归定义。

1:有且仅有一个特定的称为根(root)的结点。

2:当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)

(2) 什么样的树被称为红黑树?

答:一种特定类型的二叉树,用于实现关联数组

2. TreeMap的使用和底层实现

(1) TreeMap的常用构造方法有哪些?

答:1://无参构造方法,没有指定比较器,这时,节点顺序依赖于对key的自然排序

public TreeMap(){

Comparator = null;

}

2://指定比较器的构造方法,这时,节点顺序依赖于该比较器

public TreeMap(Comparator<? super K>comparator){

This.comparator = comparator;

}

3://根据其他Map来创建TreeMap,没有指定比较器

public TreeMap(Map<? extends K,extends V>m){

Comparator = null;

putAll(m);

}

4://根据其他SortedMap来创建TreeMap,比较器设置为SortedMap所用的比较器

public TreeMap(SortedMap<K,?Extends V>m){

Comparator = m.comparator();

Try{

buildFromSorted(m.size(),m.entrySet().iterator(),null,null);

}catch(java.io.IOException cannotHappen){

}catch(ClassNotFoundException cannotHappen){

}

}

(2) TreeMap的底层数据结构是什么?

答:红黑树。

3. Set接口_HashSet的用法

(1) Set集合存储元素的特征?

答:无序。不可重复只能放入一个null元素

(2) Set接口常用的子类有哪些?

答:HashSet/TreeSet

4. HashSet底层实现_JDK源码分析

(1) HashSet的底层数据结构概念?

答:HashSet的底层数据结构是哈希表

(2) HashSet与HashMap的关系?

答:HashSet是采用哈希算法实现,底层实际是用HashMap实现的(HashSet本质就是一个简化版的HashMap),因此,查询效率和增删效率都比较高

5. TreeSet的使用_JDK源码分析

(1) TreeSet的底层数据结构是什么?在存储自定义元素时是通过什么方式去掉重复元素的?

答:红黑树,指定顺序,对象存入后会按照指定顺序排列。进行比较时equals返回true则去掉一个该元素

(2) TreeSet集合的特点?

答:TreeSet内部需要对存储的元素进行排序,因此对应的类需要实现Comparable接口才能根据compareTo()方法比较对象之间的大小,才能进行内部排序,如果要放入TreeSet中的类没有实现Comparable接口,则会抛出异常:java.lang.ClassCastException。

TreeSet中不能放入null元素

6. 泛型

(1) 为什么需要泛型?使用泛型的好处有哪些?

答:为了更好地使用容器,泛型可以帮助建立类型安全的集合,在使用了泛型的集合中,遍历是不必进行强制类型转换。JDK提供了支持泛型的编译器,将运行时的类型检查提前到了编译时执行,提高了代码可读性和安全性。

(2) 泛型分几类,分列举例说明?

答:1:泛型类:把泛型定义在类上。

public class ObjectTool<T>{

private T obj;

public T getObj(){

return obj;

}

public void setObj(T obj){

this.obj = obj;

}

}

2:泛型方法:把泛型定义在方法上

public class ObjectTool{

public<T> void show(T t){

System.out.println(t);

}

}

3:泛型接口:把泛型定义在接口上

定义接口:

public interface Inter<T>{

public abstract void show(T t);

}

定义实现类:

public class InterImpl<T> implements Inter<T> {

@Override

public void show(T t) {

System.out.println(t);

}

}

4:泛型通配符:

A: ? : 任意类型,如果没有明确,那么就是Object以及任意的Java类了。

B: ? extends E : 向下限定,E只能是 E本身及其子类。

C: ? super E : 向上限定,E只能是 E本身及其父类。

7. 泛型的高级使用_容器中使用泛型

(1) 泛型的高级应用分为哪两类?

答:extends和super

(2) 泛型的上限指的是什么含义,请举例说明?

答:泛型的上限:extends,限定父类。上限的应用场合:往集合当中加入元素

class Demo

{

public static void main(String[] args)

{

//泛型上限的使用

TreeSet<Student> ts1 = new TreeSet<>();

ts1.add(new Student("lisi",21));

ts1.add(new Student("zhaosi",24));

ts1.add(new Student("wangsi",20));

TreeSet<Worker> ts2 = new TreeSet<>();

ts2.add(new Worker("lisi",22));

ts2.add(new Worker("zhaosi",24));

ts2.add(new Worker("wangsi",28));

// TreeSet<E>

// TreeSet(Collection<? extends E> c)

//假如是Student类,<Studend extends Person>,其父类的对象也是可以存入的

TreeSet<Person> ts = new TreeSet<Person>(ts1);

TreeSet<Person> ts = new TreeSet<Person>(ts2);

System.out.println("Hello World!");

}

}

java comparator_一个Java程序员的成长历程(012)天相关推荐

  1. 【黑马程序员西安中心】一个女程序猿的成长历程

    一个女程序猿的成长历程 人生总是磕磕绊绊的,没有一帆风顺的旅程,成长路上总有那么几个拦路虎在你不知道的地方藏着,然后在某一天突然跑出来证明一下存在感.这个时候就要看你意志坚定不坚定了,是继续往下走,不 ...

  2. 女程序员的成长历程(一)

    女程序员的成长历程(一) 1.我为什么要成为一个java程序员 上大学时稀里糊涂选的专业是计算机科学与技术,因为那时候它热门,听别人说好找工作所以就选了,浑浑噩噩的混过所有的课堂,考试挂科常有,很多科 ...

  3. 我打算写一个《程序员的成长课》

    已经2019年了,新年新气象.在新的一年里,我想做件有意义的事儿.具体是什么事呢?这里先留个悬念. 我是一个爱思考的人,我也工作好几年了,这段时间内心突然有个想法:程序员的个人成长有规律可循吗? 没有 ...

  4. 为什么用 Java:一个 Python 程序员告诉你

    每当我告诉别人我一直在用Java工作时,大家的反应都是: "纳尼!Java?为啥是Java?" 说实话,本人刚开始的时候也是同样的反应.但是由于Java的类型安全,执行性能和坚如磐 ...

  5. 一个野生程序员的成长

    介绍 89年人,经历比较复杂,总之神奇地爱上了编程,目前在杭州从事 iOS 开发工作 我是如何走上编程的道路 高一那年,同学拿了本书 黑客xxx 我一眼就爱上了它,研究里面的内容,学习里面的技术,嗯, ...

  6. 一个菜鸟程序员的成长心路(持续更新)

    学习还是要把心沉下来,不要老是想着去和别人比较,一惯的竞争式思维会导致自己很累,每个人都有自己的人生,不必苛求在每个阶段都去超过对手,要学会去过自己的生活.其实人生中快乐是最重要的,不置可否,成功的喜 ...

  7. 一个c++程序员的学习历程自述

    我是2011的毕业生,工作已经有一年半了,今天看了一篇博客,主要是讲博主自己以前在大学打游戏,从大二开始醒悟,学java,然后准备逆袭,我看了些评论,发现博主还是对自己的未来迷茫的很,想想自己以前何尝 ...

  8. 一个阿里巴巴程序员的心路历程

    来源:创业家 作者:@放翁_文初 淘宝开放平台技术产品负责人 10月13日,关于淘宝开放平台技术部分的分享看到有些同学留言说有这样的机会和环境是幸运的,的确在阿里这些年赶上了公司的发展,赶上了互联网技 ...

  9. java bufferedwriter 写入tab_一个Java程序员的成长历程(014,015)天

    第29次(IO流) 学习主题:IO流 学习目标: 1 掌握序列化和反序列化 2 掌握装饰器模式 对应视频: http://www.itbaizhan.cn/course/id/85.html 对应文档 ...

最新文章

  1. php vendor 删除,yii2我删除了vendor目录,然后重新composer install composer update就不行了。。。...
  2. 试编写一个将双向循环链表逆置的算法_循环双向链表在电路计算中的应用
  3. jquery.form 和MVC4做无刷新上传DEMO
  4. 【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
  5. MySQL基础入门学习【2】数据类型
  6. caffe caffe.cpp 程序入口分析
  7. 【hortonworks/registry】NoClassDefFoundError: org/apache/zookeeper/Watcher
  8. 碌人乘凉-- AERCHI 你所不懂的
  9. 与阿里合伙人合影,两年净赚一百万,这个草根姑娘有什么魔力?
  10. 两种储能器件 电容和电感 课堂笔记
  11. swift json解析 JSONSerialization
  12. 6-2 折半查找的实现 (10 分)
  13. 呀,要解析的xml文件有1G大,怎么办?
  14. SEO 和 SEM 的优缺点有哪些区别和优势
  15. Java代码实现用for循环打印斐波那契数列前20项
  16. SpringBoot 整合activiti5.22 实现一个完整的请假流程
  17. linux环境下mysql主从数据库配置(maser-slave-replication)
  18. Android的增量更新
  19. [洛谷P2698] [USACO12MAR]花盆Flowerpot
  20. 伺服电机向前三秒,向后三秒,循环往复

热门文章

  1. phpstorm 2019.1 mac
  2. 2018-2019-2 20175320实验三《敏捷开发与XP实践》实验报告
  3. pycharm 快捷使用
  4. 【刷题】BZOJ 1023 [SHOI2008]cactus仙人掌图
  5. Linux 驱动面试题总结【转】
  6. partproble在RHEL 6下无法更新分区信息
  7. iOS开发——获取本设备IP
  8. 【Android基础】页面跳转与传值(Activity跳转与传值)
  9. 推荐一个很棒的JS绘图库Flot
  10. Visual Stdio下安装WTL的向导Widzard