什么是集合

集合是一种容器,类似前面的数组,集合用来存储对象,相对数组,集合可以增加,删除等操作。

1、Collection集合接口

1.1 List子接口

1.1.1 ArrayList

ArrayList可以添加有序且可以重复的对象
ArrayList底层封装数组实现,分配的是一块连续内存空间
读取快,增删慢,线程不安全
初始大小是10,扩充时扩充50%

ArrayList的一些操作实例

//Main类
import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {
        //创建一个ArrayList集合
        ArrayList a1 =new ArrayList();

        //创建3个学生对象
        Stu s1 = new Stu("张三",12);
        Stu s2 = new Stu("李四",11);
        Stu s3 = new Stu("王五",13);

        //在集合中添加对象
        a1.add(s1);
        a1.add(s2);
        a1.add(s3);

        //删除集合中的元素
        a1.remove(s1);

        //查看集合中有几个对象
        System.out.println(a1.size());

        //判断集合中是否为空
        System.out.println(a1.isEmpty());

        //判断某一个对象是否在集合中
        System.out.println(a1.contains(s3));

        //将另一个集合中所有对象添加进来
        a1.addAll(a1);

        //集合转换成数组
        Stu sArray[] = new Stu[a1.size()];
        a1.toArray(sArray);

        for(Stu x:sArray){
            System.out.println(x);
        }

        //取值
        System.out.println(a1.get(0));

        //删除集合里所有对象
        a1.clear();
    }
}

//Stu类
public class Stu {
    private String name;
    private int age;
    public Stu(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

LinkedList、Vector具体操作流程与ArrayList一致

1.1.2 LinkedList

底层封装链表实现,分配的是不连续的内存空间。
增删快,读取慢,线程不安全
没有扩容的机制
使用首尾添加的操作【addFirst()和addLast()】

1.1.3 Vector

老版本java使用,底层封装数组实现
增删插速度都慢,线程安全
初始大小10
扩充时扩充一倍

1.2 Set子接口

Set操作方式与List接口基本一致
Set接口与List接口最大区别是无序且不允许重复
因此.get方法不能使用

Set接口常用的实现类
HashSet:散列存放,无序
TreeSet:有序存放,自然排列如(123456789升序排序)
Set接口对存、取、删对象都有很高的效率

  • HashSet的遍历方法

    public static void main(String[] args) {
        //创建3个学生对象
        Stu s1 = new Stu("张三",12);
        Stu s2 = new Stu("李四",11);
        Stu s3 = new Stu("王五",13);

        //实例化一个HashSet集合
        HashSet<Stu> hs=new HashSet();//<Stu>声明这个HashSet中存储的都是Stu对象
        hs.add(s1);
        hs.add(s2);
        hs.add(s3);

        //遍历HashSet中的数据
        for (Stu s:hs){
            System.out.println(s);
        }
    }

2、Map集合接口

  1. Map集合通过键值对(Key-Value)的形式来存储数据。

  2. Map中,Key可以为任意类型,实际开发建议使用String,value也可以是任意类型;

  3. Map集合通过键获取值,查询速度非常快。

  4. Map里的值不可以重复,出现重复是后存入值会覆盖前面的值

Map的常用实现类

HashMap:使用频率最高,无序,线程不安全,允许Key值出现一次Null,Value允许为Null;

TreeMap:线程不安全,自然升序,Key值不允许为null,Value值可以
HashTable:无序,线程安全,它不仅实现了Map接口也实现了Dictionary接口,它的Key值与Value都不允许出现Null;

值可以重复

hashSet的遍历方法

    public static void main(String[] args) {
        //创建3个学生对象
        Stu s1 = new Stu("张三",12);
        Stu s2 = new Stu("李四",11);
        Stu s3 = new Stu("王五",13);

        //实例化一个HashSet集合
        HashSet<Stu> hs=new HashSet();//<Stu>声明这个HashSet中存储的都是Stu对象
        hs.add(s1);
        hs.add(s2);
        hs.add(s3);

        //遍历HashSet中的数据
        for (Stu s:hs){
            System.out.println(s);
        }
    }

3、分支

另外还有三个分支,均是为上述两大接口服务的。

3.1 Iterator接口(迭代器)

一个集合中有多种对象,遍历是可以使用Iterator迭代器进行遍历。

    public static void main(String[] args) {
        HashSet hs=new HashSet();
        hs.add("张三");
        hs.add("李四");
        hs.add(666);

        //返回一个Iterator迭代器对象
        //用it接收
        Iterator it=hs.iterator();

        while (it.hasNext()){//判断有没有下一个值
            System.out.println(it.next());
        }
    }

3.2 Comprator接口(比较器)

在集合中存储对象时候,用于对象之间的比较;

3.3 Collecitons工具类

注意该类名带个s,一般就表示工具类。里面提供了很多静态方法,来对Colleciton集合进行操作。

文章作者: pymdv
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 屠龙少年
Java手记 集合
喜欢就支持一下吧