美团面试官很随意的三道题,就知道你java集合框架的相关内容是背诵了面试题还是有丰富的实际使用经验

1、面试官:能画一下ArrayList的Dragrams吗?

我:画不出来,但知道底层原理。

2、ArrayList有哪些函数接口,能写一下吗?

 

3、现在有一个list,如何删除指定的几个元素,能手写一段代码吗?

我:慌乱应付中,手写代码呀,没有IDEA根本想不起来呀。

 

简直就是耻辱,一个学而不专的耻辱。

下面开始恶补吧。

Iterable接口:遍历器接口,实现了这个接口的类能够轻松便利集合中的每元素。
Iterator<T> iterator();
default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
        action.accept(t);
    }
}
default Spliterator<T> spliterator() {
    return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
public interface Collection<E> extends Iterable<E> 接口
public interface Collection<E> extends Iterable<E> {    //一共新增了19种方法
    // Query Operations


    int size();   //返回集合中元素个数


    boolean isEmpty();  //判断集合是不是空的


    boolean contains(Object o);   //判断集合中是否包含传入的元素


    Iterator<E> iterator();   //返回一个遍历器


    Object[] toArray();   //转成数组

 

    <T> T[] toArray(T[] a);   // 这个不知道,传入数组,饭后返回数组,是不是要保存至指定的数组中?

    // Modification Operations


    boolean add(E e);


    boolean remove(Object o);


    // Bulk Operations

    boolean containsAll(Collection<?> c);


    boolean addAll(Collection<? extends E> c);


    boolean removeAll(Collection<?> c);


    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;
    }


    boolean retainAll(Collection<?> c);


    void clear();


    // Comparison and hashing


    boolean equals(Object o);

    /**
     * Returns the hash code value for this collection.  While the
     * <tt>Collection</tt> interface adds no stipulations to the general
     * contract for the <tt>Object.hashCode</tt> method, programmers should
     * take note that any class that overrides the <tt>Object.equals</tt>
     * method must also override the <tt>Object.hashCode</tt> method in order
     * to satisfy the general contract for the <tt>Object.hashCode</tt> method.
     * In particular, <tt>c1.equals(c2)</tt> implies that
     * <tt>c1.hashCode()==c2.hashCode()</tt>.
     *
     * @return the hash code value for this collection
     *
     * @see Object#hashCode()
     * @see Object#equals(Object)
     */
    int hashCode();


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


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


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

Collection是集合类的基本接口,提供了很多方法,实现了Collection接口的所有集合类都必须实现或者覆盖这些方法。

  • 返回集合中元素的个数;
  • 判断集合是不是空的;
  • 判断某一个元素是不是集合中的元素;
  • 返回一个遍历器;
  • 将列表转成数组输出;
  • 增、删元素;
  • 集合对集合的操作,即操作的参数是一个子集,包括增加一个子集到该集合、删除一个集合到该子集、判断是不是包含这个子集;
  • removeIf()  使用lambda移除元素;
  • retainAll(Collection <?> c)  移除取反,不在传入子集中的元素全部移除;
  • void clear(); 移除所有的元素;
  • 判断是不是相等;
  • 返回哈希code;
  • 返回流;
  • 返回并行流;

大致可以总结如下:

  1. 元素对集合的操作:增加、删除、判断包含关系;
  2. 集合对集合的操作:增加、删除、判断包含关系;
  3. 集合本身属性的操作:是不是空,元素个数,遍历器,转数组等;
  4. 花样法删除元素:java8引入的Lambad也用到了,还有取反删除,全部删除;
  5. 赠送方法:判断相等,返回hashCode;
  6. 返回流,包括正常流和并行流。

 

 public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);

        //ArrayList 结构彻底分析
        ArrayList<String> list = new ArrayList<>();
        list.add("miller");
        list.add("xiaofang");
        list.add("boy");
        list.add("girl");
        list.add("man");
        list.add("woman");
        System.out.println("list中元素的个数:" + list.size());
        //使用高级的方式删除指定的几个元素 方法一:
        
        //如果我想删除指定的三个元素, miller, boy, man,怎么办?
        list.removeIf(s -> {
            if(s.equals("miller") || s.equals("boy") || s.equals("man")) {
                return true;
            }
            else {
                return false;
            }
        });
        System.out.println("使用方法一后list中元素的个数:" + list.size());
        Iterator<String> it = list.iterator();

        if(list.contains("woman")) {
            System.out.println("list中包含 woman" );
        }

        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }

使用Lambda表达式实现删除指定元素的代码如上。

// 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值