黑马程序员——JAVA集合
------- android培训、java培训、期待与您交流! ----------
所有的类集都存放在java.util包中
(一)Collection接口
Collection是保存单值集合的最大父类;在一般开发中很少直接使用Collection,而直接使用其子接口,
子接口主要有:List,Set,Queue,SortedSet。
Collection子接口的定义:
List: 可以存放重复的内容。
Set :不能存放重复的内容,所有的重复内容是靠hashCode()和equals()两个方法区分的。
Queue:队列接口。
SortedSet:可以对集合中的数据进行排序。
1 List接口
List常用的子类:ArrayList和 Vector
两种子类都可以通过对象的多态性,为List实例化
List的操作:
(1).add(int index,E element) 根据索引添加元素
(2)List(remove(String)、remove(int index))中存在两种删除:根据内容、根据编号
(3) 在List接口中提供get()方法,通过size()方法循环输出此方法可以根据索引取出内容,这是List所独具有的;
ArrayList与Vector的区别
a.时间区别: 前者是jdk1.2之后推出、后者jdk1.0推出的
b.性能: 前者采用异步处理方式,性能更高;后者采用同步处理方式,性能较低
c.线程安全: 前者属于非线程安全的操作类;后者属于线程安全的操作类
d.输出: 前者只能用Iterator、foreach输出;后者使用Iterator、foreach、Enumeration输出
2 Queue接口
public boolean offer(E o) 添加元素到链表结尾
public E remove() 检索并删除表头常用子类:
get(int index):通过脚标获取元素。
3 Set接口
b.HsetSet:使用散列存放,本身没有顺序,插入顺序就是保存顺序
如果一个对象想要进性排序操作,则依靠Comparable接口完成。
但就算排好序,我们会发现问题,有的对象因某一个属性重复,排序后对象消失了,
要解决此问题需覆写两个方法:hashCode()和equals()d代码如下:
public Person(String name,int age){
public boolean equals(Object obj){ //覆写equals,完成对象比较
Person p = (Person)obj ; //向下转型
if(this.name.equals(p.name)&&this.age==p.age){
return this.name.hashCode() * this.age ; //定义一个公式
return "姓名:" + this.name + ";年龄:" + this.age ;
public static void main(String args[]){
Set<Person> allSet = new HashSet<Person>() ;
allSet.add(new Person("张三",30)) ;
allSet.add(new Person("李四",31)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("王五",32)) ;
allSet.add(new Person("赵六",33)) ;
allSet.add(new Person("孙七",33)) ;
4 SortSet接口
比如:TreeSet类也是SortSet的子接口,所以此接口的所有类都是可以排序的;
public Comparator<? super E> comparator() 返回与排序有关联的比较器
public SortedSet<E> headSet(E toElement)返回从开始到指定元素的集合
(二)接口输出
1.Iterator接口
Iterator ListIterator foreach Enumeration
b.在使用集合输出时必须形成一个思路:“只要是碰到了集合输出操作, 就一定使用Iterator接口“因为这是最标准的做法
Iterator是专门的迭代输出接口,所谓的迭代输出即使将元素一个个进行判断,判断其是否有内容
List本身存在删除方法(remove()),如果在使用迭代输出的过程中使用
List的删除方法进行删除操作此事代码将会出问题,所以在使用Iterator输出时,
不要使用集合类中的remove()方法,而只能使用Iterator接口中的remove()方法。
2.ListIterator接口
Iterator接口主要的功能是有前向后输出,此时如果实现由后向前或者双向输出, 就必须使用Iterator的子接口————ListIterator。
b.虽然此接口可以进行双向输出,但是Collection接口中并没有定义可以为此操作实例化的操作,是有List接口中才存在了ListIterator接口的实例化操作。
3.foreach及Enumeration接口
例: import java.util.ArrayList;
public static void main(String args[]){
List<String> all = new ArrayList<String>() ;
2.Enumeration是最早的集合输出方式,现在使用此接口输出时,一般都是直接操作Vector类完成的。
public class EnumerationDemo01{
public static void main(String args[]){
Vector<String> all = new Vector<String>() ;
Enumeration<String> enu = all.elements() ;
while(enu.hasMoreElements()){ //判断是否有内容,hasNext()
System.out.print(enu.nextElement() + "、") ; //输出元素:next()
(三)Map接口
1.Map接口与Collection接口的区别:
Collection每次保存的对象都是一个对象,但在Map中保存的是一对对象,形式以: key——>value的形式保存
2.Map接口的常用子类:
WeakHashMap:弱引用的Map集合,当内容不再使用时,可以清楚无用数据,可以使用gc进行回收。
3.Map接口的注意事项:
对于Map接口来说,其本身是不能直接使用迭代进行输出,因为Map中的每个位 置存放的是一对值,而Iterator中每次只能找到
一个值。所以,如果此时非要使用迭代进行输出的话,则必须按照以下步骤完成:
(1)将Map的实例通过entrySet()方法变为Set接口与对象:
(3)通过Iterator迭代输出,每个内容都是Map.Entry的对象;
(4)通过Map.Entry进行key——>value的分离
如果要使用非系统类作为Map的key,则此类必须覆写Object类中的hashCode()和equals()方法;
作为key,或者更准确的说是作为对象的时候,实际上是依靠hashCode()和equals()来判断两个匿名对象是否相等,这一点有系统内部自动完成。
------- android培训、 java培训、期待与您交流! ----------
黑马程序员——JAVA集合相关推荐
- 黑马程序员——Java集合基础知识之Map
android培训.java培训.期待与您交流! Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每 ...
- 黑马 程序员——Java基础---IO(下)
黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...
- 黑马程序员Java教程学习笔记(五)
学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...
- 黑马程序员Java教程学习笔记(三)
学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(三) 面向对象:设计对象.注意事 ...
- 黑马程序员——Java字符流、字节流IO流
黑马程序员--Java字符流.字节流Io流 ---------------------- <a href="http://www.itheima.com"target=&qu ...
- 黑马 程序员——Java基础---流程控制
黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...
- 2023年黑马程序员Java学习路线图
2023年Java学科免费学习资源放送40+套课程,超过600小时的内容! 在过去的一年里,为了帮助更多人线上充电,学会更多技能,黑马程序员举办了 150+ 场免费直播公开课,新增精品视频教程 80+ ...
- 黑马程序员 JAVA WEB 第三节 MYSQL 约束
这是阿锃总结的第三节黑马程序员JAVA WEB视频的MYSQL约束部分的笔记.希望可以帮助跟我一样正在学习Java web的同学们.我们一起进步. b_d 若果有同学也想学习黑马程序员Java w ...
- 黑马程序员Java零基础视频教程_下部(P52-P134)
黑马程序员Java零基础视频教程_下部(P52-P134) 1. 异常 1.1 异常体系介绍 1.2 编译时异常和运行时异常 1.3 异常在代码中的两个作用 1.4 JVM虚拟机默认处理异常的方式 1 ...
最新文章
- 张立贤:积跬步至千里,我与地学大数据的探索之旅 | 提升之路系列(五)
- javascript高级程序设计之基本概念
- 设计一个程序实现两个任意长的整数的求和运算_深入 Python (7) Karatsuba 实现长整数乘法...
- 操作系统(五)输入/输出(I/O)管理
- pycharm 快捷键
- python vba 秒出结果_为什么公司每天用20个人手工处理数据出报告,也不用5个会vba,python的人来制作??...
- asp控制oracle,asp下用OracleInProcServer完成对Oracle的连接和操作
- 《UNIX网络编程卷1》第一例及问题
- SOLID 设计原则 In C# 代码实现
- 使用ANNdotNET GUI工具创建CIFAR-10深度学习模型
- OpenGL 获取当前屏幕坐标对应的三维坐标
- html怎么实现追加表格,jQuery实现html表格动态添加新行的方法
- 70部MAYA灯光材质渲染教程合集
- FreeBSD+XP双系统
- 从放弃本专业到直播编程,这女孩都经历了些什么?
- Linux 用终端运行网易云音乐
- requests.exceptions.SSLError: HTTPSConnectionPool(host=‘edith.xiaohongshu.com‘, port=443): Max retri
- C#--如何用字符串组成的逻辑表达式进行判断,如:“7>2(4<7||8>4)“,字符串写的逻辑表达式来进行判断(只需3步)
- 陈艾盐:《春燕》百集访谈节目第六十九集
- 捷速ocr文字识别软件使用说明