Collection集合接口

  • 1.Collection接口的常用方法
  • 2.Collection集合迭代
  • 3.contains方法解析
  • 4.集合中元素的删除
  • 5.List接口的特有方法
  • 6.Set接口

1.Collection接口的常用方法

1.Collection中能存放什么元素
  没有使用泛型之前,collection中可以存储object的所有子类型
  使用了泛型之后,collection中只能存储某个具体的类型
  集合中不能存储基本数据类型,也不能存java对象,只能存储java对象的内存地址。

2.Collection中常用方法:
注意:collection中包含的方法在它的实现类中也有,也可以使用,是公共的。
boolean add(Object e)

//Collection c=new Collection(); //接口是抽象的,无法实例化
boolean add(Object e) 向集合中添加元素
int size(); 获取集合中元素的个数
void clear(); 清空集合中的所有元素
boolean contains(Object o):判断当前集合中是否包含元素o,包含返回true,不包含返回false
boolean remove(Object o) 删除集合中的某个元素
boolean isEmpty() 判断该集合中的元素个数是否为0
Obect [] toArray() 将集合转换为数组

public static void main(String[] args) {//Collection c=new Collection();      //接口是抽象的,无法实例化Collection c=new ArrayList();//测试collection接口中的常用方法c.add(1200);      //自动装箱,实际上是放进去了一个对象的内存地址。Integer i=new Integer(1200)c.add(3.14);      //自动装箱c.add(new Object());c.add(true);//获取集合中元素的个数System.out.println("集合中元素的个数"+c.size());//清空集合c.clear();System.out.println("集合中元素的个数"+c.size());//再向集合中添加元素c.add("hello");c.add("world");c.add("好客");c.add("绿巨人");//判断集合中是否包含绿巨人boolean flag=c.contains("绿巨人");System.out.println(flag);     //trueboolean flag2=c.contains("绿巨人2");System.out.println(flag2);    //falseSystem.out.println("集合中元素的个数"+c.size());//删除集合中某个元素c.remove("绿巨人");System.out.println("集合中元素的个数"+c.size());//判断集合是否为空System.out.println(c.isEmpty());      //falsec.clear();System.out.println(c.isEmpty());      //true
}

输出
集合中元素的个数4
集合中元素的个数0
true
false
集合中元素的个数4
集合中元素的个数3
false
true

2.Collection集合迭代

public static void main(String[] args) {//注意:以下的遍历方式/迭代方式,是所有collection通用的一种方式//在Map集合中不能用,在所有的collection以及子类中使用//创建集合对象Collection c=new ArrayList();//后面的集合无所谓,主要是看前面的collection接口,怎么遍历/迭代//添加元素c.add("abc");c.add("def");c.add(100);c.add(new Object());//对集合Collection进行遍历/迭代//第一步:获取集合对象的迭代器对象Iterator//collection为什么能调用这个方法,因为继承了Iterable接口,可使用其父类的方法Iterator it=c.iterator();//第二步:通过以上获取的迭代器对象,开始迭代遍历集合
/*以下两个方法是迭代器Iterator中的方法boolean hasNext()如果仍有元素可以迭代,则返回trueObject next() 返回迭代的下一个元素void remove() 从迭代器指向的collection中移除迭代器返回的最后一个元素(可选操作)* */while(it.hasNext()){//不管你当初存进去的是什么,取出来统一都是objectObject obj=it.next();System.out.println(obj);}}

输出
abc
def
100
java.lang.Object@15db9742

迭代器是一个对象,有两个方法hasnext()和next()。
迭代器是通用的。

public static void main(String[] args) {//HashSet集合。无序不可重复//无序:存进去和取出的顺序不一定相同//不可重复:存进去100,不能再存100Collection c=new HashSet();c.add(100);c.add(200);c.add(90);c.add(300);c.add(600);c.add(30);c.add(100);Iterator it=c.iterator();while(it.hasNext()){System.out.println(it.next());}
}

输出
100
200
600
90
300
30

3.contains方法解析

深入collection集合的contains方法
boolean contains(Object o)
判断集合中是否包含某个对象o,如果包含,返回true,如果不包含返回false

contains底层里面调用了equals方法。

Collection c=new ArrayList();
String s1=new String("abc");      //内存地址假设s1=0x1111
c.add(s1);
String s2=new String("def");      //内存地址假设s2=0x2222
c.add(s2);String x=new String("abc");          //内存地址假设s3=0x3333
//c集合中是否包含x
//contains里面调用了equals方法
System.out.println(c.contains(x));

输出:true
contains方法是用来判断集合中是否包含某个元素的方法
那么它在底层是它在底层中是怎么判断集合中是否包含某个元素的呢?
调用了equals方法进行比对
equals方法返回true,就表示包含这个元素。
对于一些对象类型,则需要重写其equals方法。

4.集合中元素的删除

public static void main(String[] args) {//创建集合Collection c=new ArrayList();//注意:此时获取的迭代器,指向的是那是集合中没有元素状态下的迭代器 //一定要注意:集合结构只要发生改变,迭代器必须重新获取Iterator it=c.iterator();//添加元素c.add(1);c.add(2);c.add(3);while(it.hasNext()){Object obj=it.next();System.out.println(obj);}
}

当集合结构发生了改变,迭代器没有重新获取时,调用next()方法,会发生异常

重点:
当集合结构发生改变时,迭代器必须重新获取,如果还是用以前的迭代器,会出现异常
删除元素之后,集合的结构发生变化,应该重新获取迭代器,但是循环下一次的时候,并没有重新获取迭代器,所以会出现异常

public static void main(String[] args) {//创建集合Collection c=new ArrayList();//添加元素c.add("abc");c.add("def");c.add("ghi");Iterator it=c.iterator();while(it.hasNext()){Object obj=it.next();//删除元素之后,集合的结构发生变化,应该重新获取迭代器,但是循环下一次的时候,并没有重新获取迭代器,所以会出现异常c.remove(obj);System.out.println(obj);}
}

在迭代集合元素的过程中,不能调用集合对象的remove方法,否则会出现异常。
可以使用迭代器的remove方法

//创建集合
Collection c=new ArrayList();//添加元素
c.add("abc");
c.add("def");
c.add("ghi");
Iterator it=c.iterator();
while(it.hasNext()){Object obj=it.next();it.remove();//c.remove(obj);System.out.println(obj);
}
System.out.println(c.size());

输出0;

5.List接口的特有方法

测试list接口的常用方法
1.list集合存储元素特点:有序且重复
有序:list集合中的元素有下标,从0开始,以1递增。
可重复:存储一个1,还可以继续存储1
2.list既然是collection接口的子接口,那么肯定list接口中有自己“特色”的方法
以下只列举出list接口特有的常用方法
void add(int index,E element);
E get(int index);
E remove(int index);
E set(int index,E element);
void add(int index,E element);在列表的指定位置插入指定元素(第一个参数是下标)

public static void main(String[] args) {//创建list类型的集合List myList=new ArrayList();//添加元素myList.add("A");      //默认是向集合末尾添加元素myList.add("B");myList.add("C");myList.add("D");//在列表的指定位置插入指定元素(第一个参数是下标)//效率有点低。myList.add(1,"king");//迭代Iterator it=myList.iterator();while(it.hasNext()){Object et1=it.next();System.out.println(et1);}
}

E get(int index);根据下标获取元素

//根据下标获取元素
Object firstObj = myList.get(0);
System.out.println(firstObj);
//因为有下标,所以List集合有自己比较特殊的遍历方式
//通过下标遍历,list集合特有的方式,set没有
for(int i=0;i<myList.size();i++){Object obj = myList.get(i);System.out.println(obj);
}

E remove(int index);
删除指定下标位置的元素

//删除指定下标位置的元素
//删除下标为0的元素
System.out.println(myList.size());
myList.remove(0);
System.out.println(myList.size());//修改指定位置的元素
myList.set(2, "soft");

以上几个方法不需要死记硬背,理解一下,找帮助文档。

6.Set接口

HashSet的特点:无序且不可重复

//演示HashSset的特点
Set<String> strs=new HashSet<>();
//添加元素
strs.add("hello3");
strs.add("hello4");
strs.add("hello1");
strs.add("hello2");
strs.add("hello3");
strs.add("hello3");
//遍历
for(String s:strs){System.out.println(s);
}

输出
hello1
hello4
hello2
hello3
1.存储时顺序和取出的顺序不同
2.不可重复
3.放到hashSet集合的元素实际上是放到HashMap集合的key部分了。
TreeSet集合存储元素的特点
无序不可重复的,但是存储的元素可以自动按照大小顺序排序,称为可排序集合

//创建集合对象
Set<String> strs=new TreeSet<>();
//添加元素
strs.add("A");
strs.add("B");
strs.add("Z");
strs.add("Y");
strs.add("Z");
strs.add("K");
strs.add("M");
//遍历set集合
//从小到大自动排序
for(String s:strs){System.out.println(s);
}

输出
A
B
K
M
Y
Z

无序指的是存进去的顺序和取出来的顺序不同,元素没有下标
排序是按照从小到大的顺序排序

Java基础-Collection集合接口(List及Set)相关推荐

  1. Java 基础 Collection集合

    package cn.itcast.demoDateformat;import java.util.ArrayList; import java.util.Collection;/* * List接口 ...

  2. Java 基础 Collection集合拓展

    package cn.itcast.demoDateformat;import java.util.ArrayList; import java.util.Collection; import jav ...

  3. Java中Collection集合接口

    在Java中有数组,但数组不能存储引用变量.所以数组用得不是很多,一般Java中用继承Collection接口的实现类比较多.其中List接口和Set接口继承了Collection接口,而Map接口并 ...

  4. [Java基础]Collection集合

    Collection:

  5. Thinking in java基础之集合框架

    Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...

  6. java把map值放入vector_Thinking in java基础之集合框架

    Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...

  7. java基础 ArrayList集合基本方法演示

    java基础 ArrayList集合基本方法演示 import java.util.ArrayList; import java.util.Iterator;public class ArrayLis ...

  8. Java基础(集合框架——Collection、List、Set、泛型)

    为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多 个对象的操作,就对对象进行存储,集合就是存储对象常用的一 种方式. 数组和集合类同是容器,有何不同? 数组虽然也可以存储 ...

  9. JAVA基础-06.集合-14.【List、Set】

    01_数据结构_栈&队列 02_数据结构_数组 03_数据结构_链表 04_数据结构_红黑树 05_HashSet集合存储数据的结构(哈希表) 06_Set集合存储元素不重复的原理 day03 ...

最新文章

  1. mvc-3模型和数据(1)
  2. java 运行时路径_如何在运行时检查当前Java类路径(重复)
  3. sql数据导入错误代码: 0x80004005_SQL入门第八关 项目实战
  4. DataFrame 重新设置索引: reindex 和 reset_index 的区别
  5. uuid会重复吗_UUID的版本你知道吗
  6. 全卷积网络 FCN 详解
  7. Mac OS X Snow Leopard 10.6下载及安装
  8. C#生成随机姓名 单姓 复姓
  9. 微软惊天泄漏,Win11 预览版镜像提前出世
  10. 如何恢复计算机永久删除文件,怎么恢复被彻底删除的文件?简单有效方法分享...
  11. 信息系统集成有以下几个显著特点
  12. 华为云教程(云硬盘EVS)
  13. 智能车浅谈——抗干扰技术硬件篇
  14. 荣耀v40和华为Nova8pro哪个好 华为Nova8pro和荣耀v40的区别
  15. linux下电路仿真软件下载,Linux下电路仿真.pdf
  16. MQTT开源库mosquitto安装和使用(一)
  17. redis,Spring Cache,Mango,ES
  18. 线段树(区间修改)模板题 Luogu 2357 守墓人
  19. 初探Electron,从入门到实践
  20. 全球最大同性交友网站的所有用户密码都无法登录!!!

热门文章

  1. 华为招聘公关总监:接触近10位路透资深记者 年薪高达20万美元
  2. Jmeter+jenkins+ant自动化测试环境搭建
  3. nosql mysql mongodb_nosql数据库MongoDB的用法
  4. 初入C++(一) c++中的一些基础和与c的一些区别
  5. pojo类不能有默认值怎么办_打印机不能打印是什么原因 打印机不能打印处理方法介绍【详解】...
  6. thinkphp3.2.3 找不到自定义模型_Orion HTC VIVE高性价比动作捕捉,虚拟直播 支持UE4.25 导入自定义模型...
  7. birt中文手册在线_QGIS简体中文翻译现状
  8. textaligncenter仍然不居中_5个word你不知道的功能
  9. python变量类型之间转换_【Python】Python 变量类型(变量赋值,数据类型,数据转换)...
  10. GBK转unicode码查询表的改进