简单的集合知识

集合

集合框架

1.Collection接口:单列集合,用来存储一个一个的对象

​ list接口:存储有序、可重复的数据 动态数组

​ ArrayList

​ LinkedList

​ Vector

​ Set接口:存储无序、不可重复的数据 集合

2.Map接口:双列集合,用来存储一对一对(key-value)的数据

Collection的方法

import java.io.Serializable;
import java.util.*;

/**
 * Collection接口中的方法使用
 */
class person{
    String name;
    int age;

    public person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class SetTest {
    public static void main(String[] args) {
//        Collection coll = new ArrayList();
//        //1.add(Object)
//        coll.add(1);
//        coll.add("3");
//        //2.size()   返回集合元素的数量
//        System.out.println(coll.size());
//        Collection coll1 = new ArrayList();
//        coll1.add(1);
//        //3.addAll(Collection c)   将另一个集合的元素添加到一个集合
//        coll.addAll(coll1);
//        //4.isEmpty()  判断集合中是否有元素
//        System.out.println(coll.isEmpty());
//        //5.clear()  清除集合中所有的元素
//        coll.clear();
//        coll1.add(new String("123"));
          //6.contains()方法  判断集合中是否包含所给元素
          System.out.println(coll1.contains(new String("123")));
          //如果同时new两个值相同的String对象,会返回True
          //因为在ArrayList的源码中调用的是equals方法,String是重写了equals方法
          coll1.add(new person("Jerry",12));
//        System.out.println(coll1.contains(new person("Jerry",12)));
//        //这个情况会返回false,因为person类没有重写equals方法,默认判断地址,而不是内容
//        //7.containsAll(Collection c)  判断另一个集合的元素是否都在该集合中
//          coll.containsAll(coll1);
//        //8.remove()  移除元素    同样会调用equals方法,先找到他再删除
//        coll.remove("123");
//        //9.removeAll(Collection c)  移除当前集合中所有集合c的元素
//        coll.removeAll(coll1);
        Collection collection=Arrays.asList("123",123);  //Arrays.asList()方法返回List
        Collection coll=Arrays.asList("123",123,345);
        Collection coll1=Arrays.asList("123");

        //10.retainAll(Collection c)  移除未包含在Coll1中的所有元素,并把交集赋给coll1
        coll1.retainAll(coll);
        System.out.println(coll1);
//        coll.removeAll(coll1);
        System.out.println(coll);
        //11.equals()方法    判断两个集合是否相等,包括顺序和内容
        //12.toArray()  将集合转换为数组
        Object[] objects = coll.toArray();
        for (Object c:objects
             ) {
            System.out.println(c);
        }
        //asList()  将数组转化为集合
        List<String> strings = Arrays.asList(new String[]{"23", "rg"});
        System.out.println(strings);
        //输出结果为:[23, rg]
        List<int[]> ints = Arrays.asList(new int[]{123, 456});
        System.out.println(ints);
        //输出结果为:[[I@10f87f48]  当作是一个元素,本来是List存的是对象
        //非静态方法:iterator(),迭代器Iterator接口,用于集合元素的遍历
        Iterator iterator = coll.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

itertor迭代器的使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yTVVU6Qq-1597590083246)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20200711172725983.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HcIlvNZn-1597590120512)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20200711172725983.png)]在这里插入图片描述

ArrayList的源码分析

//ArrayList的源码分析   1.7
ArrayList list = new ArrayList(); //底层创建了长度是10的Object[]数组elementData
list.add(1); //如果此次的添加导致底层elementData数组容量不够,则扩容
//默认情况,扩容为原来容量的1.5倍,同时需要将原有数组中的数据复制到新的数组
//建议开发中使用带参的构造器 
ArrayList list = new ArrayList(capacity);
//ArrayList的源码分析   1.8
        ArrayList list1 = new ArrayList();//底层Object[] elementData初始化为{},并没有创建长度
        list1.add(1);//第一次调用add()时,底层才创建了长度10的数组;

如果详细,请参考源代码!

ArrayList类新添加的方法

//ArrayList多的方法
        ArrayList list1 = new ArrayList();//底层Object[] elementData初始化为{},并没有创建长度
        //void add(int index,Object ele)
        list1.add(2,3);
        //boolean addAll(int index,Collection eles):从index位置开始将eles中的所有元素添加进来
        //int indexOf(Object obj):返回obj在集合中首次出现的位置
        //int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置
        //Object remove(int index):移除指定index位置的元素,并返回此元素
        //Object set(int index,Object ele):设置指定index位置的元素为ele
        //List sublist(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的子集合
set接口没有新增的方法

set接口的方法和Collection接口的方法一样

set接口来存储无序、不可重复的数据

1.无序性:不等于随机性,存储的顺序是按照哈希值

2.不可重复性:调用类的哈希方法先计算出元素的哈希值,放到数组的一个位置,如果这个位置无元素,则直接添加,若有,则使用该类的equals方法,判断是否相等。若不相等,则使用链表,若相等,则不添加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只小猪~~~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值