IT十八掌掌第十一天课程总结

今天学完IT十八掌第十一天java基础课程:


学习内容:

 

Vector

-------------------------------------------

add("tom");

add(index,"tom");

remove(int index)

数组列表,查询快,增删慢。

|---ArrayList

|---Vector

链表    查询较慢,增删快

|---LinkList  

spacer.gif

Iterator it = list.iterator();

boolean    it.hasNext( )    判断是否有下一个元素

Next()    取出一个元素

spacer.gif

所以判断是否有下一个元素,hasNext()

next()返回是Object类对象,注意类型转换,

可以通过泛型解决,格式<E>        接在类名后指定类型

泛型是编译时约束,

Set

----------------------------------

接口,继承于Collection

实现类

HashSet

TreeSet

蜜蜂与熊的问题,重点搞懂,多线程生产消费。

--------------

HashSet:

---------------------------------

  

public int hashCode()

{

}


public boolean equals(Object obj)

{

}

注:

Set不能添加重复元素,判断是否重复会先调用hashCode()方法判断

再调用equals方法判断,两者都相同时,两个对象算是重复的。

而与两个对象是否同一对象无关。

也就是说Set判断是否重复的范围超出了同一对象的,不同对象只要

hashCode()和equals()返回相同也会判断成重复。

remove中也是利用hashCode()和equals()方法来判断重复的。

问题:两个相同对象,hashCode()和equals()必定相同吗?

所以必定重复?

答:不一定,在hashCode()中使用age++,使得两个相同对象

调用两次hashCode()方法的返回值不同,hashSet会认为这两个对象不重复,

hashSet也能添加这两个相同对象,所以两个相同对象不一定是重复的,hashSet

判断是否重复首先判断hashCode(),相同后再判断equals()方法。

只有hashCode()和equals的值相同,才会判断两个元素是重复的,而与是否是同一对象无关。





TreeSet

-------------------------------

有序的Set,底层采用二叉树


存储对象必须具备比较性,自定义比较器Comparator,重写compare(p1 , p2)方法

或者实现Comparable接口重写compareTo( p )方法。


comparator自定义比较器

Comparator<Person> comp = new Comparator<Person>( ) {

            public int compare(p1 , p2)

            {

             }

};

//将比较器作为参数传递给TreeSet,使得其按自定义的比较器规则进行排序。

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

问题:TreeSet通过什么样的方式遍历二叉树,将需要添加的对象与集合中元素进行比较呢?

spacer.gif

解答:由于TreeSet底层采用的是二叉数,每次遍历时大数在右边,小数在左边。

           从元素的中间数开始判断(偶数的话去中间数的整数部分,比如2.5就取2位置上的数先比较),

            如下图的顺序,很快就可以将对应元素插入到集合

spacer.gif

问题:TreeSet怎么判断两个元素是否重复。

通过比较器判断,如果返回0,两个元素则是重复的。

Map

-------------------------------------

spacer.gif

HashMap

spacer.gif

spacer.gif



遇到的问题:

  1,TreeSet使用比较器判断是否重复时是如何取数据的,经验证采用的是遍历二叉树。

  2,HashSet和HashMap的区别与联系,HashSet底层采用的是HashMap,HashMap中的元素是key-value形式的。



需要帮助的问题

Map应用


本文出自 “菜鸟成就数据之路” 博客,转载请与作者联系!

你可能感兴趣的:(java,vector,基础)