------- 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接口

Queue定义的方法

public E element()         找到链表的标头

public boolean offer(E o)   添加元素到链表结尾

public E peek()            找到表头

public E poll()       删除此表头

public E remove()     检索并删除表头常用子类:

Queue 常用类

LinkedList:链表结构,增删速度快。

取出List集合中元素的方式:

get(int  index):通过脚标获取元素。

iterator():通过迭代方法获取迭代器对象。

3   Set接口

Set接口是Collection的子接口,不能加入重复元素

不能像List那样进行双向输出

a.Set接口常用的子类:

HashSet:散列存放

TreeSet:有序存放

b.HsetSet:使用散列存放,本身没有顺序,插入顺序就是保存顺序

c.TreeSet:可以自动进行排序

对对象进行排序时要注意:

如果一个对象想要进性排序操作,则依靠Comparable接口完成。

但就算排好序,我们会发现问题,有的对象因某一个属性重复,排序后对象消失了,

要解决此问题需覆写两个方法:hashCode()和equals()d代码如下:

import java.util.Set ;

import java.util.HashSet ;

class Person{

private String name ;

private int age ;

public Person(String name,int age){

this.name = name ;

this.age = age ;

}

public boolean equals(Object obj){       //覆写equals,完成对象比较

if(this==obj){

return true ;

}

if(!(obj instanceof Person)){

return false ;

}

Person p = (Person)obj ;       //向下转型

if(this.name.equals(p.name)&&this.age==p.age){

return true ;

}else{

return false ;

}

}

public int hashCode(){

return this.name.hashCode() * this.age  ; //定义一个公式

}

public String toString(){

return "姓名:" + this.name + ";年龄:" + this.age ;

}

};

public class RepeatDemo02{

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)) ;

System.out.println(allSet) ;

}

};

4    SortSet接口

SortSet和Set接口类似:

比如:TreeSet类也是SortSet的子接口,所以此接口的所有类都是可以排序的;

SortSet定义的方法:

public Comparator<? super E> comparator()   返回与排序有关联的比较器

public E first()             返回集合中的第一个元素

public SortedSet<E> headSet(E toElement)返回从开始到指定元素的集合

public E last()    返回最后一个元素

(二)接口输出

1.Iterator接口

a.在集合的操作中支持一下集中方法输出

Iterator    ListIterator    foreach    Enumeration

b.在使用集合输出时必须形成一个思路:“只要是碰到了集合输出操作,    就一定使用Iterator接口“因为这是最标准的做法

c.Iterator接口的操作原理:

Iterator是专门的迭代输出接口,所谓的迭代输出即使将元素一个个进行判断,判断其是否有内容

如果有就将其输出;

hasNext()判断内容   next()取出内容

d.使用Iterator输出时注意:

List本身存在删除方法(remove()),如果在使用迭代输出的过程中使用

List的删除方法进行删除操作此事代码将会出问题,所以在使用Iterator输出时,

不要使用集合类中的remove()方法,而只能使用Iterator接口中的remove()方法。

2.ListIterator接口

a.Iterator与ListIterator的区别:

Iterator接口主要的功能是有前向后输出,此时如果实现由后向前或者双向输出, 就必须使用Iterator的子接口————ListIterator。

b.虽然此接口可以进行双向输出,但是Collection接口中并没有定义可以为此操作实例化的操作,是有List接口中才存在了ListIterator接口的实例化操作。

c.增加及替换元素

add()

set()

3.foreach及Enumeration接口

1.foreach不尽可以输出数组,实际上还支持集合;

例: import java.util.ArrayList;

import java.util.List;

public class ForeachDemo01{

public static void main(String args[]){

List<String> all = new ArrayList<String>() ;

all.add("hello") ;

all.add("_") ;

all.add("world") ;

for(String str:all){

System.out.print(str + "、") ;

}

}

};

2.Enumeration是最早的集合输出方式,现在使用此接口输出时,一般都是直接操作Vector类完成的。

例:import java.util.Vector;

import java.util.Enumeration;

public class EnumerationDemo01{

public static void main(String args[]){

Vector<String> all = new Vector<String>() ;

all.add("hello") ;

all.add("_") ;

all.add("world") ;

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接口的常用子类:

HashMap:无序存放,key不允许重复

Hashtable:无序存放,key不允许重复

TreeMap:可以排序,按key排序,key不允许重复

WeakHashMap:弱引用的Map集合,当内容不再使用时,可以清楚无用数据,可以使用gc进行回收。

IdentityHashMap:key可以重复的Map集合

3.Map接口的注意事项:

a.Map的输出

对于Map接口来说,其本身是不能直接使用迭代进行输出,因为Map中的每个位     置存放的是一对值,而Iterator中每次只能找到

一个值。所以,如果此时非要使用迭代进行输出的话,则必须按照以下步骤完成:

(1)将Map的实例通过entrySet()方法变为Set接口与对象:

(2)通过Set接口实例为Iterator实例化;

(3)通过Iterator迭代输出,每个内容都是Map.Entry的对象;

(4)通过Map.Entry进行key——>value的分离

b.直接使用非系统类作为key

如果要使用非系统类作为Map的key,则此类必须覆写Object类中的hashCode()和equals()方法;

作为key,或者更准确的说是作为对象的时候,实际上是依靠hashCode()和equals()来判断两个匿名对象是否相等,这一点有系统内部自动完成。

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

黑马程序员——JAVA集合相关推荐

  1. 黑马程序员——Java集合基础知识之Map

                                         android培训.java培训.期待与您交流!   Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每 ...

  2. 黑马 程序员——Java基础---IO(下)

    黑马程序员--Java基础---IO(下) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供 ...

  3. 黑马程序员Java教程学习笔记(五)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...

  4. 黑马程序员Java教程学习笔记(三)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(三) 面向对象:设计对象.注意事 ...

  5. 黑马程序员——Java字符流、字节流IO流

    黑马程序员--Java字符流.字节流Io流 ---------------------- <a href="http://www.itheima.com"target=&qu ...

  6. 黑马 程序员——Java基础---流程控制

    黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...

  7. 2023年黑马程序员Java学习路线图

    2023年Java学科免费学习资源放送40+套课程,超过600小时的内容! 在过去的一年里,为了帮助更多人线上充电,学会更多技能,黑马程序员举办了 150+ 场免费直播公开课,新增精品视频教程 80+ ...

  8. 黑马程序员 JAVA WEB 第三节 MYSQL 约束

    这是阿锃总结的第三节黑马程序员JAVA WEB视频的MYSQL约束部分的笔记.希望可以帮助跟我一样正在学习Java web的同学们.我们一起进步.   b_d 若果有同学也想学习黑马程序员Java w ...

  9. 黑马程序员Java零基础视频教程_下部(P52-P134)

    黑马程序员Java零基础视频教程_下部(P52-P134) 1. 异常 1.1 异常体系介绍 1.2 编译时异常和运行时异常 1.3 异常在代码中的两个作用 1.4 JVM虚拟机默认处理异常的方式 1 ...

最新文章

  1. 张立贤:积跬步至千里,我与地学大数据的探索之旅 | 提升之路系列(五)
  2. javascript高级程序设计之基本概念
  3. 设计一个程序实现两个任意长的整数的求和运算_深入 Python (7) Karatsuba 实现长整数乘法...
  4. 操作系统(五)输入/输出(I/O)管理
  5. pycharm 快捷键
  6. python vba 秒出结果_为什么公司每天用20个人手工处理数据出报告,也不用5个会vba,python的人来制作??...
  7. asp控制oracle,asp下用OracleInProcServer完成对Oracle的连接和操作
  8. 《UNIX网络编程卷1》第一例及问题
  9. SOLID 设计原则 In C# 代码实现
  10. 使用ANNdotNET GUI工具创建CIFAR-10深度学习模型
  11. OpenGL 获取当前屏幕坐标对应的三维坐标
  12. html怎么实现追加表格,jQuery实现html表格动态添加新行的方法
  13. 70部MAYA灯光材质渲染教程合集
  14. FreeBSD+XP双系统
  15. 从放弃本专业到直播编程,这女孩都经历了些什么?
  16. Linux 用终端运行网易云音乐
  17. requests.exceptions.SSLError: HTTPSConnectionPool(host=‘edith.xiaohongshu.com‘, port=443): Max retri
  18. C#--如何用字符串组成的逻辑表达式进行判断,如:“7>2(4<7||8>4)“,字符串写的逻辑表达式来进行判断(只需3步)
  19. 陈艾盐:《春燕》百集访谈节目第六十九集
  20. 捷速ocr文字识别软件使用说明

热门文章

  1. Word2vec原理与应用
  2. 调用opensmile编译的DLL动态库API进行声音特征提取
  3. 升级iOS 16后续航时间变短了,如何提升续航?
  4. QQ第三方登录(PC + 手机)
  5. Redis expire
  6. 网站等保三级怎么做?手续是怎样的?
  7. mui.fire运用
  8. 本地通用验证码识别DLL/通用滑块识别/文字点选/图标点选/OCR文字识别/本地识别DLL
  9. 怎么读取照片内的文字
  10. web平台使用threejs实现三维视频融合的思路