Surpass Day21——Java 集合

目录

1、集合的定义

2、集合的继承结构

2.1 超级父接口Collection

2.2 超级父接口Map

2.3 总结

3、Collection接口

3.1 Collection存放的元素类型

3.2 Collection的常用方法

4、集合遍历/迭代

4.1 如何遍历集合

4.2 迭代器是通用的

5、深入Collection的contains方法


1、集合的定义

1)集合实际上是一个容器,可以容纳其他类型的数据。集合不能直接存放基本数据类型,另外集合也不能直接存储java对象,而存储的是java对象的内存地址(引用)

2)为什么集合在开发中使用较多?

集合是一个容器,是一个载体,可以一次容纳多个对象,实际开发中,假设连接数据库,数据库当中有10条记录,那么假设把这10条记录查询将10个数据封装成10个java对象,然后将10个java对象放到某一个集合当中,将集合传到前端,然后遍历集合,将一个数据一个数据展现出来

list.add(100);//自动装箱

注意:

集合再java中本身就是一个容器,是一个对象,集合在任何时候存储的但是"引用"

3)java中每一个不同的集合,底层对应不同的数据结构,往不同的集合中存储元素,等于将数据放到了不同的数据结构(数据存储结构)当中。其中:数组、二叉树、链表、哈希表都是常见的数据结构

4)new ArrayList(); 创建一个集合,底层是数组

new LinkedList();创建一个集合对,底层是链表

new TreeSet(); 创建一个集合对象,底层是二叉树

5)集合类和集合接口都在在java.utill包下

2、集合的继承结构

在java中集合分为两大类:

一类是单个方式存储元素,这一类集合中超级父接口:java.utill.Collection;

一类是以键值对的方式存储元素,这一类元素中超级父类接口是:java.utill.Map;

2.1 超级父接口Collection

                                                                        L i s t

 

 

2.2 超级父接口Map

2.3 总结

ArrayList:底层是数组

LinkedList:底层是双向链表

Vector:底层是数组,线程安全的,效率较低,使用较少

HashSet:底层是HashMap,放到HashSet集合中的元素等同于放到HashMap集合key部分了

TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到HashMap集合key部分了

HashMap:底层是哈希表

Hashtable:底层也是哈希表,只不过线程安全的,效率较低,使用较少

Properties:是线程安全的,并且key和value只能存储字符串String

TreeMap:底层是二叉树,可以自动按照大小顺序排序

List集合存储元素的特点:

有序:存进去和取出来的顺序相同,每一个元素都有下标

可重复:存进去1,还可以存储1

Set集合存储元素的特点

无序:存进去和取出来的顺序不一定相同,元素没有下标

不可重复:存进去1,不可以再存储1

SortedSet集合存储元素特点: 无序不可重复的,

元素可排序:可以按照大小顺序排列

Map集合的特点

Map集合的key,就是一个Set集合

往Set集合中放数据,实际上放到了Map集合的key部分

3、Collection接口

3.1 Collection存放的元素类型

没有使用“泛型”之前Collection可以存储Object的所有子类型

使用“泛型”之后,Collection只能存储某个具体的类型

(集合中不能直接存储基本数据类型,也不能存储java对象,存储的是java对象的内存地址)

3.2 Collection的常用方法

1)boolean add(Object e)向集合中添加元素

//多态机制,接口是抽象的,无法实例化
Collection c = new ArrayList();
//测试Collection接口中的常用方法
c.add(1200);//自动装箱,实际上是放进去一个对象的内存地址。Integer c = new Integer(1200);
c.add(3.14);//自动装箱
c.add(new Object());
c.add(new Student());
c.dd(true);//自动装箱
System.out.println("集合中的元素个数是:" + c.size());//5

2)int size()获取集合中的元素的个数

3)void clear()清理集合

4)boolean contains(Object o)判断当前集合中是否包含元素o,包含返回ture,不包含返回false;

c.add("绿巨人");
System.out.println(c.contains("绿巨人"));

5)boolean remove(Object o)删除集合中的某个元素

c.remove("绿巨人");

6)boolean isEmpty()判断该集合中元素中的个数是否为0

c.clear();
System.out.println(c.isEmpty());//true

7)*Object[ ] toArray()集合转换成数组

c.add(1200);
c.add(3.14);
c.add("12345");
//转换成数组
Object[] objs = c.toArray();
for(int i = 0 ; i<objs.length ; i++){
    //遍历数组
    object o = objs[i];
    System.out.println(o);//调用toString方法
}

4、集合遍历/迭代

4.1 如何遍历集合

迭代方法是Collection通用的一种方法,在Map集合中不能用。在所有的Collection以及子类当中使用

//创建集合对象
Collection c = new ArrayList();
//添加元素
c.add("abc");
c.add("def");
c.add(100);
c.add(new Object());
//对集合Collection进行遍历/迭代
//第一步:获取集合对象的迭代器对象Iterator
Iterator it = c.iterator();//、、、、、、、、、、、、、、c调用iterator()拿到迭代器,迭代器是个对象,其中对象有两个方法
//第二步:通过以上获取的迭代器对象开始迭代/遍历集合
/*
    以下两个方法是迭代器对象Iterator中的方法:
    boolean hasNext()如果仍有元素可以迭代,则返回ture。
    Object next() 返回迭代的下一个元素。
*/
​
​
​
while(it.hasNext()){
    Object obj = it.next();
    System.out.println(obj);
}

Collection c = new ArrayList();
//添加元素
c.add(1);//自动装箱成Integer类型
c.add(2);
c.add(3);
c.add(4);
//迭代集合
Iterator it = c.Iterator();
while(it.hasNext()){
    //存进去什么类型,取出来还是什么类型
    Object obj = it.next();
    if(obj instanceof Integer){
        System.out.println("Integer类型");//这里调用toString方法转换成了字符串
    }
}

4.2 迭代器是通用的

HashSet集合:无序不可重复

无序:存进去和取出的顺序不一定相同;

不可重复:存了100不可能再存100;

Collection c2 = new HashSet();
//添加元素
c2.add(100);//自动装箱成Integer类型
c2.add(2);
c2.add(33);
c2.add(43245);
c2.add(100);
//迭代集合
Iterator it2 = c2.Iterator();
while(it2.hasNext()){
    System.out.println(it2.next());//这里调用toString方法转换成了字符串
}

5、深入Collection的contains方法

contains方法是判断集合中是否包含某个元素的方法

底层调用了equals方法进行比较,并且String重写了equals方法,如果不重写equals方法则会比较内存地址

放在集合中类型一定要重写equals方法,八大基本类型的包装类都重写了equals方法

public class asdf{
    public static void main(String[] args) {
        //创建集合对象
        Collection c = new ArrayList();
        //向集合中存储元素
        String s1 = new String("abc");
        ((ArrayList) c).add(s1);
        String s2 = new String("def");
        ((ArrayList) c).add(s2);
        //新建的对象String
        //集合中是否包含x?包含返回ture
        String x =new String("abc");
        System.out.println(c.contains(x));//true
    }
}

import java.util.ArrayList;
import java.util.Collection;
​
public class asdf{
    public static void main(String[] args) {
        //创建集合对象
        Collection c = new ArrayList();
        //向集合中存储元素
        String s1 = new String("abc");
        ((ArrayList) c).add(s1);
        String s2 = new String("abc");
        //((ArrayList) c).add(s2);
        c.remove(s2);//这里s2和s1是相同的,所以删s2就是删s1
        //如果s2也创建出来了,那么删s2就是删s2
        System.out.println(c.size());
    }
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值