【Java集合_Collection_List_Queue】

集合的框架结构

在这里插入图片描述

Collection集合

java.util.Collection接口是List接口、Queue 接口以及Set接口的父接口,因此该接口里定义的方法
既可用于操作List集合,也可用于操作Queue集合和Set集合。

方法声明功能介绍
boolean add(E e);向集合中添加对象
boolean addAll(Collection<? extends E> c)用于将参数指定集合c中的所有元素添加到当前集合中
boolean contains(Object o);判断是否包含指定对象
boolean containsAll(Collection<?> c)判断是否包含参数指定的集合对象中的所有元素
boolean retainAll(Collection<?> c)保留当前集合中存在且参数集合中存在的所有对象(取两个集合的交集,当集合中的元素发生改变时才会返回true)
boolean remove(Object o);从集合中删除对象
boolean removeAll(Collection<?> c)从集合中删除参数指定的所有对象
void clear();清空集合
int size();返回包含对象的个数
boolean isEmpty();判断是否为空
boolean equals(Object o)判断是否相等
int hashCode()获取当前集合的哈希码值
Object[] toArray()将集合转换为数组
Iterator iterator()获取当前集合的迭代器
public class CollectionTest {
    public static void main(String[] args) {
        // 多态的方式构造一个Collection集合
        Collection collection = new ArrayList();
        System.out.println(collection); // []
        // 向集合中添加对象
        collection.add("hello");
        collection.add(2);
        collection.add(new Person("张飞", 28));
        System.out.println(collection); // [hello, 2, Person{name='张飞', age=28}]
        // 将参数指定集合c中的所有元素添加到当前集合中
        Collection collection1 = new ArrayList();
        collection1.add("world");
        collection1.add(666);
        // 注意!!!!!!
        collection1.addAll(collection);
        System.out.println(collection1); // [world, 666, hello, 2, Person{name='张飞', age=28}]
        collection1.add(collection);
        System.out.println(collection1); // [world, 666, hello, 2, Person{name='张飞', age=28}, [hello, 2, Person{name='张飞', age=28}]]

        // 判断是否包含指定对象
        // contains的工作原理是:Object.equals(o, e),其底层工作原理是 o == e(比较地址值)
        System.out.println(collection1.contains("world")); // true
        System.out.println(collection1.contains(collection)); // true
        // 注意:如果Person没有重写equals方法则使用继承自Object的equals方法则下述代码输出false
        System.out.println(collection1.contains(new Person("张飞", 28))); // true

        // 判断是否包含参数指定的集合对象中的所有元素
        System.out.println(collection1.containsAll(collection)); // true
        collection.add(1);
        System.out.println(collection1.containsAll(collection)); // false

        // 保留当前集合中存在且参数集合中存在的所有对象
        System.out.println(collection.retainAll(collection)); // false,因为元素没有发生改变

        // 从集合中删除对象
        System.out.println(collection); // [hello, 2, Person{name='张飞', age=28}, 1]
        System.out.println(collection.remove(new Person("张飞", 28))); // true 此处与contains方法原理一样
        System.out.println(collection.remove(3)); // false
        
		// 集合向数组转换
        Collection c = new ArrayList();
        c.add(1);
        c.add(2);
        c.add(3);
        Object[] objects = c.toArray();
        System.out.println(Arrays.toString(objects)); // [1, 2, 3]
        // 数组向集合转换
        Collection objects1 = Arrays.asList(objects);
        System.out.println(objects1); // [1, 2, 3]
    }
}

Iterator接口

java.util.Iterator接口主要用于描述迭代器对象,可以遍历Collection集合中的所有元素。
java.util.Collection接口继承Iterator接口,因此所有实现Collection接口的实现类都可以使用该迭
代器对象。

方法声明功能介绍
boolean hasNext()判断集合中是否有可以迭代/访问的元素
E next()用于取出一个元素并指向下一个元素
void remove()用于删除元素
public class IteratorTest {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add("hello");
        c.add(1);
        c.add(new Person("吕布", 30)); // hello, 1, Person{name='吕布', age=30}]
        System.out.println(c);
        // 使用迭代器遍历集合
        Iterator iterator = c.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
            /*
            hello
            1
            Person{name='吕布', age=30}
            */
        }
		
		// 迭代时删除集合中的元素
        Iterator iterator1 = c.iterator();
        while (iterator1.hasNext()) {
            Object next = iterator1.next();
            if ("hello".equals(next)) {
                iterator1.remove();
// c.remove(next); java.util.ConcurrentModificationException在迭代器中不能执行集合的删除操作,只能使用迭代器的删除操作
            }
        }
    }
}

for each循环

Java5推出了增强型for循环语句,可以应用数组和集合的遍历。
是经典迭代的“简化版”。
格式:
for(元素类型 变量名 : 数组/集合名称) {
循环体;
}

List集合

1、java.util.List集合是Collection集合的子集合,该集合中允许有重复的元素并且有先后放入次序。
2、该集合的主要实现类有:ArrayList类、LinkedList类、Stack类、Vector类。
3、其中ArrayList类的底层是采用动态数组进行数据管理的,支持下标访问,增删元素不方便。
4、其中LinkedList类的底层是采用双向链表进行数据管理的,访问不方便,增删元素方便。
5、可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别,ArrayList更适合于随机访问而LinkedList更适合于插入和删除;在性能要求不是特别苛刻的情形下可以忽略这个差别。
6、其中Stack类的底层是采用动态数组进行数据管理的,该类主要用于描述一种具有后进先出特征的
数据结构,叫做栈(last in first out LIFO)。
7、其中Vector类的底层是采用动态数组进行数据管理的,该类与ArrayList类相比属于线程安全的
类,效率比较低,以后开发中基本不用

ArrayList集合

在这里插入图片描述

LinkedList集合

在这里插入图片描述

List集合中的常用方法
方法声明功能介绍
void add(int index, E element)向集合中指定位置添加元素
boolean addAll(int index, Collection<? extends E> c)向集合中添加所有元素
E get(int index)从集合中获取指定位置元素
int indexOf(Object o)查找参数指定的对象
int lastIndexOf(Object o)反向查找参数指定的对象
E set(int index, E element)修改指定位置的元素
E remove(int index)删除指定位置的元素
List subList(int fromIndex, int toIndex)用于获取子List

Queue集合

java.util.Queue集合是Collection集合的子集合,与List集合属于平级关系。
该集合的主要用于描述具有先进先出特征的数据结构,叫做队列(first in first out FIFO)。
该集合的主要实现类是LinkedList类,因为该类在增删方面比较有优势。

方法声明功能介绍
boolean offer(E e)将一个对象添加至队尾,若添加成功则返回true
E poll()从队首删除并返回一个元素
E peek()返回队首的元素(但并不删除)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值