黑马程序员-集合类继承树

原创 2012年03月24日 11:04:02

---------------------- android培训java培训、期待与您交流! --------------------

Collection   
├List   有序、元素可以重复,因为该集合体系有索引,在索引位置添加元素
│├ArrayList    底层的数据结构使用的是数组结构
│├LinkedList  底层使用的是链表数据结构
│└Vector   底层是数组结构,被ArrayList替代,Vector线程同步,elements枚举类型
│   └Stack   
└Set  无序(存入取出的顺序不一致)、不可以重复,没有索引
  └SortedSet
  └TreeSet 可以对Set集合中的元素进行排序
  └HashSet 底层数据结构是哈希表,HashSet是如何保证元素唯一性的呢?
   是通过元素的两个方法,hashCode和equals来完成的,如果元素的HashCode值相同,才会判断equals是否为true,如果HashCode值不同,则不会调用equals方法。
   HashSet判断是否相同依赖的就是hashCode()和equals()方法,区别于ArrayList,ArrayList用的只有equals方法

Map   
├Hashtable   
├HashMap 
├SortedMap
  └TreeMap  
└WeakHashMap 

List特有方法:
增:
add(index,element)
addAll(index.Collection)
删:
remove(index,element)
改:
set(index,element)
查:
get(index)
subList(from,to)
listInterator:Interator的子接口,功能比Interator多很多,是List特有的

LinkedList特有方法:
addFirst()
addLast()
getFirst()
getLast()//只是获取
removeFirst()
removeLast()//不光去,还会删除
Set:
      HashSet:句结构式哈希表,线程是非同步的,保证元素是唯一性的原理:判断元素的      
             hashCde只是否相同,如果i相同,还会判断元素的equals方法是否为true
      TreeSet:可以对Set集合中的顺序进行排序
              TreeSet排序的第一种方式,让元素自身具备比较性,元素需要实现                   
      comparable接口,覆盖compareTo方法
              TreeSet排序的第二种方式,当元素不具备比较性,或者具备的比较性不是所          
              需要的时候,这时需要让容器自身具备比较性,定义了比较器,将比较器对                
              象作为参数传递给TreeSet集合的构造函数 
HashSet:(个人理解:表中的元素的值是按照哈希表的值来判断两个值是不是相等)
 HashSet 是哈希表实现。哈希表是一个特殊的数组,这个数组里存放的是链表(链表里存放的是符合条件的一组对象,条件是什么?下面会提到)。只要理解 HashSet 的 add 方法执行过程,就很容易理解 HashSet 了。 
  当调用了 HashSet 的 add 方法存放对象 obj , HashSet 会首先调用 obj 的 hasCode 方法得到该对象的哈希码, HashSet 会使用一个算法把它的哈希码转换成一个数组下标,该下标“标记”了 obj 的位置。如果这个位置上的链表中没有元素,那么就把 obj 对象添加到链表上。如果这个位置上的链表中已经有了元素,则遍历这个链表,调用 obj 的 equals 方法,判断 obj 是否和其中的某个元素重复,如果没有重复的元素,那么就将 obj 添加到链表上;如果有重复的元素,则不会讲 obj 对象存入 HashSet 中。 
  理解了 HashSet 的内部结构,我们再回头看看 equals 和 hashCode 方法。还记得那个约定吧?当我们重写了某个类的 equals 方法时,最好也重写该类的 hashCode 方法,并且应该遵守这样的约定:“如果两个对象不相等,那么它们的 hashCode 返回的整数不一定必须不等,但最好能为不相等的两个对象提供不同的 hashCode ,这样可以提高哈希表的性能。”为什么要有这样的约定?这样怎么就能提高哈希表性能了?我们用 HashSet 来作为例子分析一下(因为 HashSet 就是哈希表的实现)。如果我们写的某个类,重写了 equals 和 hashCode 方法,但写的很不好,就像约定中提到的那种情况,两个(或者多个)不相等的对象的 hashCode() 返回值相同。当我们往 HashSet 中添加这个类的对象时,HashSet 拿到 hashCode() 的返回值,分析哈希码,得到数组下标。但是由于对于不同的对象, hashCode 会有可能返回相同的哈希码,那么就会有可能,该数组下标下的链表中已经有了一个甚至多个元素。如果情况再糟糕一些,本应均匀分布在哈希表数组中的对象,分布在了几个链表中。最坏的情况是,所有对象的哈希码都相同,也就是说 hashCode 方法返回的是一个固定整数,那么哈希表就会变成了一个链表。还记得吗?链表的缺点是查询速度慢。那么 HashSet 的优势,查询速度快,已经不存在了。这就是所谓的降低了哈希表的性能。



---------------------- android培训java培训、期待与您交流! ----------------------

java集合复习笔记-java集合继承关系图

*面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。 *数组虽然也可以存储对象,但长度是固定的;集合长度是可变的,数组中可以...
  • sdhgood
  • sdhgood
  • 2014年08月26日 16:20
  • 10358

Java集合详解系列----Java集合继承体系详解

Java的集合类是一种特别有用的工具,它可以用于存储数量不等的多个对象,并可以实现常用的数据结构,如栈、队列等。Java集合还可以用于板寸具有映射关系的关联数组。 java集合就像是一个容器,我们可...
  • snow_7
  • snow_7
  • 2016年06月30日 16:03
  • 2610

理解C++存在继承和组合的对象构造函数调用顺序

前言: Hello,全世界早上好啊,哈哈,9月你好,2015年9月的第一天,也是自己本科生涯的最后一年了,接下来就是校招走上自己的职场,昨天是大四的第一节课,上的是软件工程,挺喜欢的一门课,...
  • u013777351
  • u013777351
  • 2015年09月01日 08:52
  • 2348

黑马程序员_WPF(WPF认识,Sender,C#基础加强类继承,集合,Xaml,控件通用属性)

一.WPF认识 很多教程都是WinForm,但是Windows8平板电脑,Windows Phone手机开发都是使用微软的XAML技术,WPF也是一个采用XAML的类似于WinForm的技术,学习之...
  • u010796875
  • u010796875
  • 2013年12月14日 00:00
  • 935

黑马程序员JavaWeb教程集合视频

  • 2017年12月19日 14:25
  • 44B
  • 下载

09_黑马程序员_黎活明__Spring如何装配各种集合类型的属性.ppt

  • 2013年06月04日 11:28
  • 6.44MB
  • 下载

黑马程序员——集合取方法和异常的继承体系

-----android培训、java培训、期待与您交流------ 内部接口   接口中,定义另一个接口。内部接口是外部接口的一个成员。   一个实现类,实现外部接口,有没有必要实现内部接口 ...
  • qq_22655663
  • qq_22655663
  • 2015年01月12日 22:05
  • 288

黑马程序员——继承的深入学习:抽象类与接口(上)

------- android培训、java培训、期待与您交流! ----------       看过毕向东老师讲解的关于抽象类与接口的课程后,获益颇丰,决定更深入的去探究一下究竟ab...
  • RyanYoung
  • RyanYoung
  • 2013年03月11日 13:49
  • 327

黑马程序员----继承与抽象类

------- android培训、java培训、期待与您交流! ---------- 继承 作用 1.      简化代码块提高复用性 2.      让类与类产生关系有关系才有...
  • u010111889
  • u010111889
  • 2013年04月07日 22:06
  • 321

黑马程序员—继承多态以及内部类

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------- 一、继承 1、继承的基本概念...
  • u011329740
  • u011329740
  • 2014年01月28日 14:50
  • 413
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员-集合类继承树
举报原因:
原因补充:

(最多只允许输入30个字)