###集合

今天任务

1.概念1.1 集合的概念1.2 集合的框架结果介绍1.3 集合和数组的对比
2.Collection接口2.1 Collections中常用的方法
3.泛型3.1 什么是泛型3.2 泛型的声明3.3 说明3.4 泛型使用时的注意事项3.5 受限泛型3.6 泛型应用在集合上
4.Iterator迭代器4.1 迭代器的工作原理4.2 迭代器的使用
5.List接口5.1 List接口的存储特点5.2 List接口的实现类

教学目标

1.掌握集合的概念以及和数组的对比
2.了解集合的框架
3.了解Collection接口中的常用方法
4.了解泛型的使用及注意事项
5.掌握Iterator的工作原理以及使用
6.掌握List接口的存储特点
7.掌握ArrayList的使用
8.了解LinkedList、Vector和Stack的使用

第一节 概念

#####1.1 集合的概念

集合与数组一样,也是一个容器,与数组不同的是,集合的长度不定,可以无限的想集合中添加元素,而且集合中存储的元素类型可以随意

#####1.2 集合的框架结构介绍

Collection集合的框架结构

Map集合的框架结构

#####1.3 集合与数组的对比

相同点:

都是数据的容器,在一个数组或集合中可以声明(存储)多个数据

不同点:

元素:数组中的元素只能是相同(相兼容类型)集合中的元素是任意的(泛型)
​
数组中可以存储基本类型和引用类型,集合只能存储引用类型
​
长度(元素个数):数组是定长的,一旦初始化长度就不可以修改集合长度可以修改,可以删除元素和添加元素

####第二节 Collection接口

#####2.1 Collection中常用的方法

方法名描述add(E e)确保此 collection 包含指定的元素(可选操作)。addAll(Collection<? extends E> c)将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。clear()移除此 collection 中的所有元素(可选操作)。contains(Object o)如果此 collection 包含指定的元素,则返回true。containsAll(Collection<?> c)如果此 collection 包含指定 collection 中的所有元素,则返回 true。equals(Object o)比较此 collection 与指定对象是否相等。isEmpty()如果此 collection 不包含元素,则返回true。iterator()返回在此 collection 的元素上进行迭代的迭代器。remove(Object o)从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。removeAll(Collection<?> c)移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。retainAll(Collection<?> c)仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。size()返回此 collection 中的元素数。toArray()返回包含此 collection 中所有元素的数组。

####第三节 泛型

3.1 什么是泛型

泛型就是可以表示一个广泛数据类型的类型参数(泛型只能表示引用类型)
形式参数:声明方法时,在方法的参数列表中声明,而且在方法体中会使用到,但是是一个未知的数据
类型参数:在一个类中声明一个未知的数据类型,在类中可以使用这个类型,但是具体类型取决于实例化时传入的实际类型

3.2 泛型的声明

1)泛型可以声明在方法中:(泛型方法)
public static <标识符> void fun(){}
​
2)泛型可以声明在类中:(泛型类)
public class 类名<标识符>{//类体//泛型可以在类中充当成员变量//泛型可以再类中充当方法的返回值//泛型可以在类中充当方法的参数
}
​
3)泛型可以声明在接口中:(泛型接口)
public interface 接口名<标识符>{//成员//泛型可以充当接口中方法的返回值//泛型可以充当接口中方法的参数
}

3.3 说明

1)标识符:只要是一个合法的标识符即可,一般情况下,只使用一个大写字母表示泛型
例:public class Person<T>{}
2)泛型的类型与声明的类或接口不需要有任何的关系
3)泛型可以在类中充当任何的成员
4)泛型具体类型取决于实例化对象时传入的实际类型

3.4 泛型使用时的注意事项

1)泛型不能在类中声明静态常量属性
final修饰的属性必须在声明的同时初始化,所以泛型不能声明常量
static修饰的属性是静态属性,先于对象,泛型类型取决于创建对象时传入的实际类型,所以泛型不能声明静态属性
综上所述:不能使用泛型声明静态常量属性
​
2)泛型不能在类中初始化数组,但是可以声明数组
初始化数组时需要给元素进行分配空间,但是泛型类型不确定无法分配空间
​
3)在类中不能使用泛型声明参数个数相同的重载方法
当一个类中有两个泛型时,创建对象时,两个泛型使用相同类型替换,那么重载方法就是相同的方法(同名,参数列表也相同)
​
4)使用不同实际类型创建出的泛型类对象的引用不可以相互赋值

3.5 受限泛型

1)<? extends T>:表示T类或者T类的子类
2)<? super T>:表示T类或者T类的父类
3)<?>:表示任意类型

#####3.6 泛型应用在集合上

泛型在集合中应用,表示的是集合中元素的类型

####第四节 Iterator迭代器

#####4.1 迭代器的工作原理

迭代器相当于一个游标,最初获取迭代器时,迭代器的位置在所有元素的前面,每迭代一个元素,迭代器向后移动一个位置

#####4.2 迭代器的使用

方法名描述hasNext()判断迭代器是否存在下一个元素可以迭代器next()迭代器迭代下一个元素remove()从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

####第五节 List接口

方法名描述add(int index, E element)在列表的指定位置插入指定元素(可选操作)。addAll(int index, Collection<? extends E> c)将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。containsAll(Collection<?> c)如果列表包含指定 collection 的所有元素,则返回true。get(int index)返回列表中指定位置的元素。indexOf(Object o)返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。lastIndexOf(Object o)返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。listIterator()返回此列表元素的列表迭代器(按适当顺序)。remove(int index)移除列表中指定位置的元素(可选操作)。set(int index, E element)用指定元素替换列表中指定位置的元素(可选操作)。subList(int fromIndex, int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。

#####5.1 List接口的存储特点

相对有序存储,可以存储相同元素(不排重),可以通过下标访问集合元素
List接口中可以使用独有的迭代器ListIterator,具有反向遍历的功能

#####5.2 List接口的实现类

5.2.1 ArrayList类

ArrayList类是List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括null在内的所有元素。
​
存储特点:相对有序存储,可以存储相同元素(不排重),可以通过下标访问集合元素,通过数组实现的集合

代码实现:

public class ArrayListDemo {public static void main(String[] args) {//创建一个ArrayList集合ArrayList<String> list = new ArrayList<>();//构造方法中的泛型可以省略list.add("zhangsan");//向集合中添加元素list.add("lisi");list.add("wangwu");System.out.println(list.isEmpty());//判断list集合是否为空集合System.out.println(list.size());//查看集合中元素的个数System.out.println(list.get(1));//获取集合中下标为1的元素System.out.println(list.set(1,"zhaoliu"));//修改集合中下标为1的元素System.out.println(list.contains("wangwu"));//查看"wangwu"是否是集合中的元素list.remove("wangwu");//删除集合中"wangwu"元素list.remove(1);//删除集合中下标为1的元素//for循环遍历集合for(int i=0; i<list.size(); i++){System.out.println(list.get(i));}//使用Iterator迭代器遍历Iterator<String> it = list.iterator();//获取迭代器while(it.hasNext()){System.out.println(it.next());}//使用ListIterator迭代器遍历ListIterator<String> lit = list.listIterator();while(lit.hasNext()){System.out.println(lit.next());}//反向遍历while(lit.hasPrevious()){System.out.println(lit.previous());}}
}

5.2.2 LinkedList类

LinkedList类是List接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括null)。
存储特点:相对有序存储,可以存储相同元素(不排重),可以通过下标访问集合元素,通过链表实现的集合
​
LinkedList集合适用在对元素插入和删除操作较频繁的时候
ArrayList集合适用在对元素查询操作较频繁的时候

5.2.3 Vector

Vector类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是Vector
的大小可以根据需要增大或缩小,以适应创建 Vector后进行添加或移除项的操作。

5.2.4 Stack

Stack类表示后进先出(LIFO)的对象栈。是Vector的子类。

5.2.5 ArrayList与LinkedList,Vector三种实现类存储的比较

a.在用法上和ArrayList完全相同【Vector就是ArrayList的前身】
​
b.底层存储采用的数据结构是数组
c.Vector是一个古老的集合,从JDK1.0开始就有了,Vector存在一些方法名比较长的方法,xxxxElement
d.Vector是线程安全的,效率低
​
ArrayLIst是线程不安全的,效率高,推荐使用ArrayList【Collections工具类中有相应的方法可以将ArrayList改为线程安全的】

linq判断集合中相同元素个数_JavaSe集合的概念以及集合框架介绍相关推荐

  1. linq判断集合中相同元素个数_iOS开发swift语法梳理:集合Set

    1.集合的三特性 确定性:给定一个集合,任意给一个元素,该元素或者属于或者不属于该集合,二者必居其一. 互斥性:一个集合中的所有元素都是不相同的. 无序性:每个元素的地位相同,元素之间是无序的. 2. ...

  2. java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)

    自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序 import java.util.Comparator; import java.util.Iterator; import java ...

  3. linq判断集合中相同元素个数_java----Collection集合常用方法

    Collection集合常用方法名 说明 boolean add(E e) 集合当中添加元素 Boolean remove(object o) 从集合当中清除指定元素 Void clear() 清空集 ...

  4. python集合中的元素是否可以重复_python列表--查找集合中重复元素的个数

    方法一: >>> mylist = [1,2,2,2,2,3,3,3,4,4,4,4] >>> myset = set(mylist) >>> f ...

  5. java 迭代器 entryset_Java使用entrySet方法获取Map集合中的元素

    本文为大家分享了使用entrySet方法获取Map集合中元素的具体代码,供大家参考,具体内容如下 /*--------------------------------- 使用entrySet方法取出M ...

  6. 判断数组中某个元素除自身外是否和其他数据不同_布隆过滤器,我也是个处理过 10 亿数据的人...

    ❝ 文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱 什么是 BloomFilter 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的.它实际上是 ...

  7. 判断数组中某个元素除自身外是否和其他数据不同_算法工程师要懂的3种算法数据结构:线性表详解...

    算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 其实这些 ...

  8. 如何去掉list集合中重复元素大全

    如何去掉list集合中重复元素大全 创建实体对象 模拟集合 方法一:遍历实体类的每一个属性 方法二:利用list中contains方法去重 方法三:java 8中流式去重操作 方法四:HashSet去 ...

  9. python集合类型中的元素是有序的_数据类型;有序集合类型(sorted set)

    有序集合sortedset 一特点 1.有序.去重 2.元素是字符串类型 3.每个元素都关联着一个浮点数分值(score),并按照分支从小到大的顺序排列集合中的元素(分值可以相同) 4.最多包含2^3 ...

最新文章

  1. 探究netty的观察者设计模式
  2. 实时音视频互动系列(上):又拍云UTUN网络详解
  3. html表单验证js代码,JavaScript表单验证实现代码
  4. 基于STM32系列芯片的 IAP实现的探索
  5. AXI_05 AXI_FULL_IP的设计与验证
  6. 最小的linux服务器_学习以最小的努力构建GraphQL服务器
  7. callback函数_小程序不同页面的异步回调,callback和promise的使用讲解
  8. php url路径问题和php文件以绝对路径引入
  9. 2021暑假牛客多校第一场A题(博弈论+暴力打表)
  10. 第四周 特殊应用:人脸识别和神经风格转换(Special applications: Face recognition Neural style transfer)
  11. 使用 processon 画 UML 图
  12. 冰点还原精灵、影子系统区别哪个好
  13. 激光成像雷达技术 你了解清楚了吗?
  14. openwrt的源码下载及其编译 (一)
  15. 欧式香草期权(普通看涨、看跌)的定价公式及实现
  16. Win10指定用户访问共享文件及“无法访问。你可能没有权限使用网络资源。”问题解决
  17. php网站建设和外包
  18. Linux学习-账户管理
  19. 【Hadoop】Hadoop Snappy 安装 (Ubuntu 16.04)
  20. 小学三年级计算机导学案,小学三年级下册科学导学案

热门文章

  1. Eclipse查找文件存储路径
  2. python画图模块_学习python画图模块plotnine:第一步安装
  3. oracle 建表id自增长_oracle 左连接、右连接、全外连接、内连接、以及 (+) 号用法...
  4. java语言实现一个长度为n_Java语言实现求解一元n次多项式的方法示例[Java代码]...
  5. ppp在linux下的编译和安装
  6. CPU8085 8086名字的由来
  7. 关于config_site.h文件【译】
  8. php怎么调试小程序,教你如何配置微信小程序
  9. android 安装第三方app,Android识别预装的第三方App方法实例
  10. idea 创建java文件_idea创建java文件 格式不对