600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java comparator_一个Java程序员的成长历程(012)天

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

时间:2019-11-21 17:29:34

相关推荐

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

第23次(容器)

学习主题:容器

学习目标:

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

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

对应视频:

/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 掌握泛型

对应视频:

/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){

parator = 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 = parator();

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!");

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。