集合与数据结构

集合的基础概念

集合:在计算机科学中,集合是一组可变数量数据项(也可能是0个)的组合。
数据项:这些数据项可能共享某些特征,需要以某种操作方式一起进行操作。一般来讲,这些数据项的类型是相同的,或基类相同(若使用的语言支持继承)。
列表(或数组)通常不被认为是集合,因为其大小固定,但事实上它常常在实现中作为某些形式的集合使用。
集合的种类包括列表,集,多重集,树和图。枚举类型可以是列表或集。

集合类是一种工具类

java集合类是一种工具类,她可以用于存储数量不等的多个对象,并可以实现常用的数据结构,如栈、队列等等,除此之外,Java集合还可以用来保存具有映射关系的关联数组,java的集合大致上可以分为Set、List和Map三种体系,从JDK1.5以后,Java增加了Queue体系集合,代表一种队列集合实现。有人想有可以自动扩展的数组,所以有了List,有人想有没有重复的数组,所以有了set,有人想有自动排序的数组,所以有了TreeSet。

java的集合类主要由两个接口派生而来,Collection和Map,她们两个是集合框架的根接口,这两个接口又包含了一些子接口或实现类。

Collection集合体系

Collection集合体系

其中Set和List接口是Collection接口派生的两个子接口,她们分别代表了无序集合和有序集合,Queue是Java提供的队列实现,有点类似于List。

Map集合体系

所有的Map实现类用于保存具有映射关系的数据。

Map集合体系

<p>上面的类图画的是Map接口的众多实现类,这些实现类在功能、用法上存在一定的差异,但是她们都有一个功能特征,Map保存的每项数据都是key-value对。</p>
<p>Map里的key是不可以重复的,key用来标识集合里的每项数据,如果需要查询Map中数据时,总是根据Map的key来获取。</p>


Collection的方法

Collection的方法

List的方法

List的方法

基于元素多的情况下。
ArrayList插入慢查询快。
LinkedList插入快查询慢。

设置集合内元素的个数

Set的方法

Set的方法

Set中,元素不能重复
List可以根据下标取值,可以重复。

Set的实现类
Set的实现类

HashSet 无重复无序

  • LinkedHashSet 无重复有序
    SortedSet 无重复升序
  • TreeSet 无重复升序(TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系)

划重点
Set中也可以存放自定义对象,那么它如何排序呢?
拿HashSet具体举个例写个代码试试。

存放自定义对象
结果

问:不是无重复吗?怎么会有两个dog1
答:因为hashset判断重复是去调用放进去对象的equals方法,而Dog没有,则调用父类Object,Object里面的equals比较的是==,这个比较的是内存地址,那么第二次放进去dog1和第一次的dog1有不同的内存地址。当然不一样啦。

如何解决:去Dog里面写equals方法。

重写equals方法

光这样ok?
no no no
还得重写hashCode()方法。

重写hashCode方法

equals相同,hashcode一定相同。
划重点2 自定义对象排序
方法一:自定义对象继承Comparable接口,重写comparable方法。

自定义对象排序

Comparable接口
override
结果

方法二:写Comparator类,更加灵活,同一个集合有多个排序方法。


方法二
Paste_Image.png
Paste_Image.png

Map

Map
Map的方法

TreeMap里面是按key排序的,若是自定义对象排序,同样按上面两种方法。


泛型-generics

泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时(instantiate)作为参数指明这些类型。

泛型

遍历

List遍历
Map的遍历

面试题

  1. Collection和Collections有什么区别?
    答:Collection是一个集合接口,它提供了对集合对象进行基本操作哦的通用接口方法。实现该接口的类主要有List和Set。
    Collections是针对集合类的一个包装类。它提供一系列静态方法以实现对各种集合的搜索、排序、线程安全等操作。

  2. ArrayList和Vector的区别?(是否有序、是否重复、数据结构、底层实现)
    ArrayList和Vector都实现了List接口,他们都是有序集合,并且存放的元素是允许重复的。它们的底层都是通过数组来实现的,因此列表这种数据结构检索数据速度快,但增删改速度慢。
    而ArrayList和Vector的区别主要在两个方面:
    第一,线程安全。Vector是线程安全的,而ArrayList是线程不安全的。因此在如果集合数据只有单线程访问,那么使用ArrayList可以提高效率。而如果有多线程访问你的集合数据,那么就必须要用Vector,因为要保证数据安全。
    第二,数据增长。ArrayList和Vector都有一个初始的容量大小,当存储进它们里面的元素超过了容量时,就需要增加它们的存储容量。ArrayList每次增长原来的0.5倍,而Vector增长原来的一倍。ArrayList和Vector都可以设置初始空间的大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。

  3. HashMap和Hashtable的区别
    HashMap和Hashtable都实现了Map接口,并且都是key-value的数据结构。它们的不同点主要在三个方面:
    第一,Hashtable是Java1.1的一个类,它基于陈旧的Dictionary类。而HashMap是Java1.2引进的Map接口的一个实现。
    第二,Hashtable是线程安全的,也就是说是线程同步的,而HashMap是线程不安全的。也就是说在单线程环境下应该用HashMap,这样效率更高。
    第三,HashMap允许将null值作为key或value,但Hashtable不允许(会抛出NullPointerException)。

  4. List 和 Map 区别?(数据结构,存储特点,这个虽然简单,但是要注意回答全面)
    这个要从两个方面来回答,一方面是List和Map的数据结构,另一方面是存储数据的特点。在数据结构方面,List存储的是单列数据的集合,而Map存储的是key、value类型的数据集合。在数据存储方面,List存储的数据是有序且可以重复的,而Map中存储的数据是无序且key值不能重复(value值可以重复)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容