【Java的集合框架】

接口:

  collection             map

list        set

实现类:

ArryList    HashSet     HashMap

LinkList    LinkHashSet   LinkHashMap

       TreeSet        TreeMap

           HashTable

【四个接口的区别】

1、collection:存储不唯一、无序的数据;

2、list:存储有序的、不唯一的数据;

3、set:存储无序的、唯一的数据;

4、Map:以键值对的形式存储数据,以键取值。键不能重复、值可以重复。

【List接口】

1、常用方法:

① add():在列表的最后添加元素;

② add(int index,E element):在列表的指定位置插入元素;

③ size():返回当前列表的元素个数;

④ get(int index):返回下标为index的元素。

如果没有泛型约束,返回Object类型,需要强转;如果有泛型约束,直接返回泛型类型,无需强转。

⑤ clear():清除列表中的所有数据

isEmpty():检测列表是否为空

⑥ contains():传入一个对象,检测列表中是否包含该对象。

如果传入的是String和基本数据类型,可以直接比对

如果传入的是实体类,则默认只比对两个对象的地址。因此,需要在实体类重写equals()方法;

Tips:

String s = "123";

"123".equals(s);//这个顺序可以防止空指针

⑦ indexOf():传入一个对象,返回该对象在列表中首次出现的地址。

lastIdexOf():传入一个对象,返回该对象在列表中最后一次出现的地址。

⑧remove():传入一个下标,或者一个对象,删除指定元素;

如果传入下标,返回被删除的对象,如果下标大于size(),会报下标越界异常;

如果传入对象,则要求重写equals方法,返回true或false表示删除是否成功

⑨set(index, obj):用新传入的对象,将指定位置的元素替换掉;

返回被替换掉的元素对象。

⑩subList(1,3):截取一个子列表,返回List类型;

toArray():将列表转为数组。返回一个Object[]类型的数据

2、ArrayList

     实现了一个长度可变的数组,在内存空间中开辟一串连续的空间,与数组的区别在于长度可以随意修改。这种存储结构在循环遍历和随机访问元素的速度比较快。

3、LinkedList

使用链表结构存储数据,在插入和删除元素时速度非常快。

LinkedList的特有方法:

① addFirst():开头插入元素。

addLast():结尾插入元素。

② removeFirst():删除第一个元素,并返回被删除的元素。

removeLast():删除最后一个元素,并返回被删除的元素。

③getFirst():返回列表的第一个元素,不删除。

getLast():返回列表的最后一个元素,不删除。


【Set接口】

1、常用方法:与List接口基本相同。

但是,由于Set接口中的元素是无序的,因此没有与下标相关的方法。

例如:get() remove() add()

2、Set接口的特点:唯一、无序;

3、HashSet 底层是调用HashMap的相关方法,传入数据后,根据数据的HashCode进行散列运算,得到一个散列值后再进行运算,确定元素在列表中的位置。

HashSet如何确定一个对象是否相等?

① 先判断对象的hashCode(),如果hashCode不同,那肯定不是一个对象。

如果hashCode相同,那继续判断equals()方法;

② 重写equals()方法。

所以,使用HashSet存储实体对象时,必须重写对象的hashCode() 和 equals()两个方法!!

4、LinkedHashSet:在HashSet的基础上,新增了一个链表。

用链表来记录HashSet中元素放入的顺序,因此使用迭代器遍历时,可以按照放入的顺序依次读出元素。

5、TreeSet:将存入的元素,进行排序,然后输出。

如果存入的是实体对象,那么实体类必须实现Comparable接口,并重写compareTo()方法。

或者,也可以在实例化TreeSet的同时,通过构造函数传入一个比较器(一个实现了Comparator接口,并重写了compare()方法的实现类的对象。

Set<person> set = new TreeSet<Person>(new Comparator(){

public int compare(Person p1,Person p2){

return p1.getId() - p2.getId();

}

});

Set<Person> set = new TreeSet<Person>(new Compare());

class Compare implements Comparator(){

//重写compare方法

}

【Comparable接口和Comparator接口的区别】

1、Comparable由实体类实现,重写comparTo()方法;

实体类实现Comparable接口以后,TreeSet使用空参构造即可

2、Comparator需要单独一个比较类进行实现,重写Compare()方法。

实例化TreeSet的时候,需要传入这个比较类的对象。


【Map接口】

1、Map接口特点:以键值对的形式存储数据,以键取值。

键不能重复,值可以重复。

2、Map接口的常用方法:

① put(key,value):向map的最后追加一个键值对;

② get(key):通过键,取到一个值;

③ clear():清除Map中的所有数据;

④ containsValue(obj):检测是否包含指定的键

containsKey(obj):检测是否包含指定的键

【HashMap 与 Hashtable 的主要区别】

1、Hashtable是线程安全的(线程同步),HashMap是线程不安全的(线程不同步);

2、Hashtable的键不能为null,HashMap的键可以为null;

3、HashMap继承了AbstractMap,HashTable继承Dictionary抽象类,两者均实现Map接口。

4、HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75。

5、HashMap扩容时是当前容量翻倍即:capacity*2,Hashtable扩容时是容量翻倍+1即:capacity*2+1。

【LinkedHashMap】

可以使用链表,记录数据放入的次序,进入让读出的顺序与放入的顺序一致,与LinkedHashSet一样。

【TreeMap】

根据键的顺序,进行排序后,输出。

如果传入的是实体对象,必须重写比较函数。详见TreeSet。

Collection集合框架详解的更多相关文章

  1. java集合框架详解

    java集合框架详解 一.Collection和Collections直接的区别 Collection是在java.util包下面的接口,是集合框架层次的父接口.常用的继承该接口的有list和set. ...

  2. Java集合框架详解(全)

    一.Java集合框架概述 集合可以看作是一种容器,用来存储对象信息.所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下. 数组与集合的区别如下 ...

  3. Java—集合框架详解

    一.描述Java集合框架 集合,在Java语言中,将一系类的对象看成一个整体. 首先查看jdk中的Collection类的源码后会发现Collection是一个接口类,其继承了java迭代接口Iter ...

  4. java的集合框架详解

    前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Jav ...

  5. Java--集合框架详解

    前言 Java集合框架的知识在Java基础阶段是极其重要的,我平时使用List.Set和Map集合时经常出错,常用方法还记不牢, 于是就编写这篇博客来完整的学习一下Java集合框架的知识,如有遗漏和错 ...

  6. iOS 开发之照片框架详解(2)

    一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLib ...

  7. iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...

  8. iOS 开发之照片框架详解

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework.html 一. 概要 在 iOS 设备中,照片和视频是相当重 ...

  9. Java集合中List,Set以及Map等集合体系详解

    转载请注明出处:Java集合中List,Set以及Map等集合体系详解(史上最全) 概述: List , Set, Map都是接口,前两个继承至collection接口,Map为独立接口 Set下有H ...

随机推荐

  1. New UWP Community Toolkit

    概述 UWP Community Toolkit 是一个 UWP App 自定义控件.应用服务和帮助方法的集合,能够很大程度的简化和指引开发者的开发工作,相信广大 UWPer 并不陌生. 下面是截取自 ...

  2. Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版

    一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...

  3. 如何使用maven搭建web项目

    博客园注册了有二十多天了,还没有写过博客,今天就发一篇,也便于后面查找笔记. 我个人已经做了几年的java web开发了,由于所在的公司是业务型公司,用的都是一些老旧的稳定技术,很少接触到稍微新点的内 ...

  4. Sublime 、NotePad++中查找匹配中文字符

    在Sublime .NotePad++中可以使用正则表达式 [\x{4e00}-\x{9fa5}] 查找匹配中文字符.

  5. linux小白成长之路10————SpringBoot项目部署进阶

    [内容指引] war包部署: jar包部署: 基于Docker云部署. 一.war包部署 通过"云开发"平台初始化的SpringBoot项目默认采用jar形式打包,这也是我们推荐的 ...

  6. RTMP规范协议

    本文参照rtmp协议英文版,进行简单的协议分析 1.什么是RTMP 关于 Adobe 的实时消息协议(Real Time Messaging Protocol,RTMP),是一种多媒体的复用和分组的应 ...

  7. C和C++运行库

    一.Windows下动态库 1. 静态函数库 这类库的名字一般是libxxx.lib:利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后 ...

  8. 关于c++停止工作

    出现这样情况有两种原因 : 1未初始化 2用scanf未用符号& 3当0做分母时

  9. 凡事预则立-于Beta冲刺前

    凡事预则立,在Beta开始前的描述 在Beta项目冲刺开始之前,我们小组组织了一次活动室的讨论,明确了一下分工和即将来临的Beta冲刺要处理的问题和需要继续改进的地方.顺带补上一直没有的照片: 针对几 ...

  10. signalR 消息推送

    业务情景一:上传报表,上传excel.如果excel的数据量很大,上万条,上十万条数据,那么这个上传请求必然是个耗时请求.用户上传之后,很关心上传的进度和结果. 业务情景二:站内消息提醒,实时有效地接 ...