java源码之Collection

前言


collection作为list,set以及queue的老大哥,对其的了解能更有效地了解数组

继承关系

collection继承自Iterable所有其有Iterable的所有相关的方法。

方法

size

  • jdk源码
int size();

返回数组的长度,如果数组的长度大于Integer最大值,返回Integer最大值。

  • demo
 public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        System.out.println(strings.size());
    }

控制台输出1

isEmpty

  • jdk源码
 boolean isEmpty();

判断数组是否为空,当数组不包含任何元素是返回true

  • demo
 public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        System.out.println(strings.isEmpty());
        strings.add("a");
        System.out.println(strings.isEmpty());
    }

代码第一次在控台输出true,第二次输出false。

contains

  • jdk源码
 boolean contains(Object o);
  • demo
public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        System.out.println(strings.contains("b"));
        System.out.println(strings.contains("a"));
    }

结合不包含"b"所以返回为false,包含"a"返回为true。

判断是否包含某个元素

iterator

  • jdk源码
Iterator<E> iterator();

获取迭代器Itertor

  • demo
public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        Iterator<String> iterator = strings.iterator();
    }

获取数组的迭代器,具体操作详见Itertor

toArray

  • jdk源码
Object[] toArray();

返回无类型数组

<T> T[] toArray(T[] a);

返回指定类型数组

  • demo
public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        Object[] os = strings.toArray();
        String[] s = strings.toArray(new String[]{"1", "2", "3"});
    }

os数据为[“a”],s的数据为[“a”,null,“3”];
toArray()返回的为原来的数组转换为的一个数组;但是toArray(T[] a)要对两个数组进行判断,如果原数组的长度大于a,则返回数组和原数组相同,否则把原数组的数据拷贝到a中,如果a的长度大于原数组,将原数组之后的那一个元素设为null。

add

  • jdk源码
 boolean add(E e);

将一个元素加入数组

  • demo
public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
    }

此时strings中一个元素"a"。

remove

  • jdk源码
boolean remove(Object o);

从数组中一处某个元素

  • demo
public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        strings.remove("a");
        System.out.println(strings.size());
    }

调用remove后数组的长度为0。

containsAll

  • jdk源码
boolean containsAll(Collection<?> c);

判断数组是否包含某个数组

  • demo
 public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        strings.add("b");
        List<String> containStrings = new ArrayList<>();
        containStrings.add("a");
        System.out.println(strings.containsAll(containStrings));
    }

strings数组包含的元素为a,b;containStrings g数组包含的元素为a,所以结果返回为true。

addAll

  • jdk源码
boolean addAll(Collection<? extends E> c);

将一个数组中的全部元素添加到数组中

  • demo
public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        strings.add("b");
        List<String> containStrings = new ArrayList<>();
        containStrings.add("a");
        strings.addAll(containStrings);
        System.out.println(strings);
    }

控制台输出为[a, b, a],说明containStrings中的元素已经添加到strings中了。

removeAll

  • jdk源码
boolean removeAll(Collection<?> c);

将一个数组中的元素从数组中全部已出

  • demo
 public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        strings.add("b");
        List<String> containStrings = new ArrayList<>();
        containStrings.add("a");
        strings.removeAll(containStrings);
        System.out.println(strings);
    }

控制输出为[b],由于containStrings包含a元素,所以string中的a元素被移除了。

removeIf

  • jdk源码
 default boolean removeIf(Predicate<? super E> filter) {
        Objects.requireNonNull(filter);
        boolean removed = false;
        final Iterator<E> each = iterator();
        while (each.hasNext()) {
            if (filter.test(each.next())) {
                each.remove();
                removed = true;
            }
        }
        return removed;
    }

根据条件删除元素
-demo

public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        strings.add("b");
        strings.removeIf(s -> strings.indexOf(s)==1);
        System.out.println(strings);
    }

将数据下表为1的元素删除掉,所以最终的结果为[a]。

retainAll

  • jdk源码
boolean retainAll(Collection<?> c);

获取集合的交集,如果集合有改变那么返回为true,否则返回为false。

  • demo
 public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        strings.add("b");
        List<String> containStrings = new ArrayList<>();
        containStrings.add("a");
        System.out.println(strings.retainAll(containStrings));
        System.out.println(strings);
    }

string中包含a,b两个元素,containStrings 中包含a元素所以string结果仅为a,containStrings不会发生任何变化。
如果string中有两个重复的元素且在containStrings 中那么这连个元素都返回。

clear

  • jdk源码
void clear();

清除集合中的所有元素

  • demo
public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        strings.add("b");
        strings.clear();
        System.out.println(strings);
    }

string最终得到的结果为[],一个空数组

equals

  • jdk源码
boolean equals(Object o);

判断两个集合是否相同

  • demo
 public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("a");
        strings.add("b");
        List<String> strings1 = new ArrayList<>();
        strings1.add("a");
        strings1.add("b");
        System.out.println(strings.equals(strings1));
    }

连个集合的元素相同,返回为true

hashCode

  • jdk源码
int hashCode();

获取集合的hashcode

spliterator

  • jdk源码
 @Override
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, 0);
    }

获取集合的分割迭代器

stream

  • jdk源码
default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

获取集合的流

  • demo
public static void main(String[] args) {
        List<Integer> nums = new ArrayList<>();
        nums.add(1);
        nums.add(2);
        nums.add(3);
        System.out.println(nums.stream().filter(num->num<3).collect(Collectors.toList()));
    }

nums获取流然后使用拦截器过滤获取小于3的数据所以结果为[1,2]

parallelStream

  • jdk源码
default Stream<E> parallelStream() {
        return StreamSupport.stream(spliterator(), true);
    }

获取集合的并行

  • demo
 public static void main(String[] args) {
        List<Integer> nums = new ArrayList<>();
        nums.add(1);
        nums.add(2);
        nums.add(3);
        System.out.println(nums.parallelStream().filter(num->num<3).collect(Collectors.toList()));
    }

和上面一样(nums获取流然后使用拦截器过滤获取小于3的数据所以结果为[1,2])

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值