`
IT_nice
  • 浏览: 8625 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_集合笔记1

阅读更多

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

 

1.集合概述

专业的存储对象的容器. 

具备增,删,查,改元素的操作. 

集合的优点:

可以存储任意类型的元素(暂时的优点)

可以存储任意多个元素.  相对于传统的数据,集合更加的优秀. 

2.集合体系之Collection

|---Collection(接口)

集合的顶层接口, 定义了集合的基本的规范. 

定义方法, 规范了集合的行为. 

增加:

boolean add(Object e)

一次添加一个元素

boolean addAll(Collection c) 

批量添加,将c 集合中的所有元素添加到指定集合中. 

删除:

void clear()

清空集合

boolean remove(Object o)

删除一个元素

boolean removeAll(Collection c)

批量删除, 将指定集合中包含c 集合中的所有元素删除. 

查找:

int size() 

获取集合的大小,元素的个数

isEmpty() 

检测集合是否为空. 集合中没有元素了... 

         boolean contains(Object o)  

         检测集合中是否包含指定的元素. 

boolean containsAll(Collection c)

检测集合中是否完全包含c 中的元素. 

修改:

boolean retainAll(Collection c)

修改集合, 紧保留集合和c 中相同的元素. 

取交集. 

其他:

Object[] toArray()

集合转数组. 

3. 集合体系之List(列表)

|---Collection(接口)

|---List (接口)

List 继承继承了Collection 接口. 

List 是Collection 的子类. List 更强的,具备更多个方法... 

找出List 集合中特有的方法:

List 就是依靠这些特殊的方法,实现自己的特性的... 

void add(int index, Object element)

boolean addAll(int index, Collection c) 

remove(int index) 

get(int index)  

int indexOf(Object o) 

int lastIndexOf(Object o) 

Object set(int index, Object element)

subList(int fromIndex, int toIndex) 

List 集合的特有方法都是和角标有关的.  

List 特点:

元素有序(存储有顺序,按照添加是的顺序存储),存储在List 集合中的元素都有角标. 元素可以重复.

元素有序,元素有角标,元素可以重复.  

并测试... 

4. 集合体系之ArrayList

学习集合的实现类,学习什么? 

研究实现类的实现原理...  看源码... 

基于该原理实现的实现类具备什么特点?

|---Collection(接口)

|---List (接口)

List 继承继承了Collection 接口. 

特点: 角标,元素有序,元素可重复. 

|---ArrayList(实现类)

一个类实现一个接口,要把接口中的所有方法(公共抽象的)都重写了

如果想要了解集合的实现的原理的,就需要集合的实现类. 

特点: 底层是数组实现, 数组是一块连续的内存,通过角标可以实现快速的定位,查找很快. 

但是增加和删除元素时,很慢, 元素的移动(增加和删除),和数组的扩容(增加元素,数组空间不足)

底层的数组的扩容,是以1.5倍扩容的... 

总结: 查找快,增删慢.  

在实际开发中,最为常见的一个集合... 

|---LinkedList

|---Vector 

|---Stack

练习题:

集合List 

元素有角标,有序,元素可以重复. 

既然元素可以重复, 编写程序去除ArrayList集合中存储的重复元素. 

1. 元素是字符串对象. 

2. 元素是自定义的对象. 

ArrayList 集合:

contains方法底层使用元素的equals方法 

以使用contains 检测集合中是否包含指定的元素. 

但是如果元素是自定义对象话, contains 底层使用的元素的equals 方法进行检测的. 如果自定义对象没有重写equals, contains 方法不能正常工作了.  

注意: 集合的equals 和元素的equals 是不同概念.... 

集合的equals 是比较集合是否相同. 

元素(Car, String,)的equals

5. 集合之LinkedList

|---Collection(接口)

定义了集合体系的基本的规范

|---List(子接口)

特点: 元素有角标,元素有序的,元素可以重复. 

|---ArrayList(实现类)

特点: 数组实现,查找快(内存地址连续,通过角标可以快速定位)

增删慢(元素的移动,数组的扩容)

|---LinkedList(实现类)

特点:  双向链表实现. 集合的每增加一个元素,创建出一个节点(Node)对象保存一个元素. 

     上一个节点会记录下一个节点的引用. 由于双向链表,下一个节点也会记录上一个节点的. 

 节点和节点的内存地址不连续, 查找很慢,增删快了... 

注意: LinkedList 和数组没有任何关系. 

特有方法:

由于双向的链表列表: 该集合操作集合的头和尾都很方便的... 

addFirst

addLast 

getFirst

getLast

removeFirst

removeLast 

栈:

stack

先进后出,后进先出... 

压栈

push() 

弹栈.

pop()

队列

queue 

先进先出. 

拍对, 银行排号.

排队:

offer()

出队

poll

6.集合体系值Vector 

缺陷:

JDK1.0 出现的. 

  具备自己特有方法,但是方法名太长. 

  底层也是数组实现, 数组在扩容是100% 扩容, 消耗内存.. 

  该集合是同步(集合的方法都是同步方法),在单线程在操作新低. 

解决: 

JDK1.2 Java 设计了集合体系. Collection. 并设计出了ArrayList . 

Vector 就被ArrayList 替代了. 

ArrayList 有点:

方法名短.

虽然也是数组实现,但是扩容不再是100%

集合被设计为非不同的. 不再使用同步方法了. -> 提高性能. 

注意: 如果ArrayList 遇到了多线程安全问题:

可以使用Collections.synchronizedList(List list); 将不同步的ArrayList 转换为同步的集合. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

   

分享到:
评论

相关推荐

    黑马程序员Javase笔记

    Java是世界上最流行的编程语言之一,尤其在...总结来说,"黑马程序员Javase笔记"涵盖了Java的基础语法、内存管理、面向对象编程、集合框架以及泛型和Map等内容,这些都是成为一名合格Java开发者必须掌握的核心知识。

    黑马程序员_超全面的JavaWeb教程-视频+源码笔记

    ### 黑马程序员_超全面的JavaWeb教程-视频+源码笔记 #### JavaWeb基础知识概览 在深入了解本教程之前,我们先来简要回顾一下JavaWeb的基础知识。JavaWeb是利用Java语言开发Web应用的技术集合。它主要包括Servlet、...

    黑马程序员_java8新特性详解笔记和源码

    Java 8是Java语言发展的一个重要里程碑,引入了许多创新性的特性和改进,...黑马程序员的Java8新特性详解笔记和源码提供了深入学习这些概念的资源,结合实际的代码示例,将有助于你更好地理解和掌握Java 8的核心特性。

    黑马程序员_从零开始征服Android之旅(第二季)源码和笔记(上)

    《黑马程序员_从零开始征服Android之旅(第二季)源码和笔记(上)》是一部针对初学者的全面Android开发教程,旨在帮助学员系统地掌握Android应用开发的基础知识和实战技巧。通过本教程的学习,你可以从理论出发,...

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day03

    本资料集合了黑马程序员2016年关于Hibernate框架的深度讲解,涵盖了从基础到高级的各种知识点,旨在帮助开发者全面理解并熟练运用Hibernate。 在Day03的学习中,我们主要关注以下几个核心内容: 1. Hibernate配置...

    黑马程序员-Java语言进阶-源码、教程笔记.zip

    day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 ...

    B站黑马程序员Python教程学习笔记.zip

    在B站黑马程序员的Python教程中,你将深入理解Python的基础概念,包括: 1. **变量与数据类型**:Python支持多种数据类型,如整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。此外,还有列表(list...

    黑马程序员_Java基础辅导班教程课件[第01期]第8天

    提供的图片文件1.PNG和2.PNG可能是课程中讲解的示例截图,视频下载地址.txt可能是用来获取配套的教学视频,而lesson可能是课程的源代码或者笔记文档。通过这些资源,学习者可以更加直观地理解和应用所学知识。在学习...

    黑马程序员_Java基础辅导班教程课件[第01期]第4天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第4天"中,我们可以推测这是针对初学者的Java编程课程,旨在帮助学员掌握Java的基础知识。 在课程的第4天,可能讲解了以下核心概念: 1. **类(Class)**:`Demo.class...

    集合-黑马程序员Java学习笔记

    本学习笔记由黑马程序员提供,旨在帮助初学者深入理解Java中的集合框架及其使用方法。 首先,我们来探讨“集合”的基本概念。在Java中,集合是一个对象容器,可以容纳多个元素,这些元素可以是任意类型的数据。Java...

    黑马程序员 hibernate 2016版讲义和笔记(4天全)

    《Hibernate技术深度剖析——基于黑马程序员2016版讲义与笔记》 Hibernate,作为Java领域中的一个著名持久化框架,为开发者提供了强大的对象关系映射(ORM)功能,极大地简化了数据库操作。本资料集是黑马程序员...

    2018年黑马程序员全套教程java基础第1天笔记+讲义

    《2018年黑马程序员全套教程java基础第1天笔记+讲义》是一份针对初学者精心编排的Java编程教程,旨在帮助新手快速掌握Java编程的基础知识。本教程结合了JDK9的新特性以及IntelliJ IDEA的实用技巧,为学习者提供了一...

    黑马java教程知识点笔记整理

    【Java编程基础】 ...以上是黑马Java教程知识点笔记的主要内容,涵盖了Java编程的基础到进阶知识,是学习和巩固Java技能的重要参考资料。通过深入理解和实践这些知识点,开发者可以逐步提升Java编程能力。

    黑马程序员java基础试题、笔记

    "黑马程序员java基础试题、笔记"这个压缩包资源为Java初学者和希望加入"黑马程序员"培训课程的学员提供了丰富的学习材料。这些资源包括面试问题合集、整理的资料、Android面试题、学员入学面试总结、面试技巧、必须...

    黑马程序员java培训就业班笔记:day16(集合框架基础总结)JAVA语言

    黑马程序员java培训就业班笔记:day16(集合框架基础总结)

    2018年黑马程序员全套java教程第2天笔记+讲义+源码

    本套教程“2018年黑马程序员全套Java教程”针对的是第二天的学习内容,主要涵盖了数据类型转换、算数运算符、比较运算符、逻辑运算符以及三元运算符,同时也涉及到了简单方法的定义与调用。这些知识点是Java编程的...

    程序员数据结构笔记

    4. **集合与查找排序**:集合是一组不重复的元素,查找是指在数据结构中找到特定元素的过程,排序则是按照特定规则排列数据。 5. **存储结构**:包括顺序存储(如数组)和链式存储(如链表)。顺序存储中,元素存储...

    黑马程序员hibernate框架开发2016版视频day1-day4源码笔记

    《黑马程序员Hibernate框架开发2016版视频day1-day4源码笔记》是一份针对初学者和进阶者深入理解Hibernate框架的重要学习资源。该资料集覆盖了Hibernate框架的基础到高级应用,通过day1至day4的学习内容,旨在帮助...

    黑马程序员java培训就业班笔记集合体系总结.docx

    1. Collection接口: Collection是所有单值集合的父接口,包括List和Set子接口。它的主要方法有: - `add(E element)`: 向集合中添加一个元素。 - `addAll(Collection<? extends E> c)`: 将另一个集合的所有元素...

    黑马程序员 从零开始征服Android之旅(第一季)源码和笔记 下

    在本资源包“黑马程序员 从零开始征服Android之旅(第一季)源码和笔记 下”中,我们聚焦于Android应用程序开发的基础与实践。通过学习,你可以系统地掌握Android开发的核心概念,逐步成长为一名合格的Android开发者...

Global site tag (gtag.js) - Google Analytics