欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaSE Collection

程序员文章站 2022-03-16 18:51:22
...

一、Collection概述

  • 集合中不能直接存储基本数据类型,也不能存储Java对象,只是存储java对象的内存地址

二、Collection中的常用方法

1. add()

  • 向集合中添加元素
import java.util.ArrayList;
import java.util.Collection;

public class Test {
	public static void main(String[] args) {
		/**
		 * 向集合中添加元素 add()
		 */
		// 创建一个集合对象
		// Collection c = new Collection(); // 接口是抽象的,无法实例化
		// 多态
		Collection c = new ArrayList();
		c.add(100); // 自动装箱:java5的新特性,实际上是放进去了一个对象的内存地址:Integer x = new Integer(100);
		c.add(true); // 自动装箱
		c.add(new Object());
		c.add(new Student());
	}
}

class Student{
	
}

2. size()

  • 获取集合中元素的个数
import java.util.ArrayList;
import java.util.Collection;

public class Test {
	public static void main(String[] args) {
		/**
		 * 获取集合中元素的个数 size()
		 */
		// 创建一个集合对象
		// Collection c = new Collection(); // 接口是抽象的,无法实例化
		// 多态
		Collection c = new ArrayList();
		c.add(100); // 自动装箱:java5的新特性,实际上是放进去了一个对象的内存地址:Integer x = new Integer(100);
		c.add(true); // 自动装箱
		c.add(new Object());
		c.add(new Student());
		
        System.out.println("集合中元素个数是:" + c.size()); // 4
	}
}

class Student{
	
}

3. clear()

  • 清空集合
import java.util.ArrayList;
import java.util.Collection;

public class Test {
	public static void main(String[] args) {
		/**
		 * 清空集合 clear()
		 */
		// 创建一个集合对象
		// Collection c = new Collection(); // 接口是抽象的,无法实例化
		// 多态
		Collection c = new ArrayList();
		c.add(100); // 自动装箱:java5的新特性,实际上是放进去了一个对象的内存地址:Integer x = new Integer(100);
		c.add(true); // 自动装箱
		c.add(new Object());
		c.add(new Student());
		
        System.out.println("集合中元素个数是:" + c.size()); // 4
        
        c.clear();
        System.out.println("集合中元素个数是:" + c.size()); // 0
	}
}

class Student{
	
}

4. contains()

  • 判断当前集合中是否包含某元素,包含返回true,不包含返回false
import java.util.ArrayList;
import java.util.Collection;

public class Test {
	public static void main(String[] args) {
		/**
		 * 判断当前集合中是否包含元素o,包含返回true,不包含返回false contains()
		 */
		Collection c = new ArrayList();
		c.add("hello");
        c.add("world");
        c.add("日期");
        c.add("Map");
        c.add(1);
		// 判断集合中是否包含"日期"
        boolean flag = c.contains("日期");
        System.out.println(flag);// true
        boolean flag2 = c.contains("创建日期");
        System.out.println(flag2);// false
        System.out.println(c.contains(1)); // true
	}
}

5. remove()

  • 删除集合中某个元素
import java.util.ArrayList;
import java.util.Collection;

public class Test {
	public static void main(String[] args) {
		/**
		 * 删除集合中某个元素 remove()
		 */
		Collection c = new ArrayList();
		c.add("hello");
        c.add("world");
        c.add(1);
        c.remove("hello");
        System.out.println("集合中元素个数是:" + c.size()); // 2
	}
}

6. isEmpty()

  • 判断该集合中元素的个数是否为0
import java.util.ArrayList;
import java.util.Collection;

public class Test {
	public static void main(String[] args) {
		/**
		 * 判断该集合中元素的个数是否为0 isEmpty()
		 */
		Collection c = new ArrayList();
		c.add("hello");
        c.add("world");
        System.out.println(c.isEmpty()); // false
	}
}

7. toArray()

  • 集合转换成数组
import java.util.ArrayList;
import java.util.Collection;

public class Test {
	public static void main(String[] args) {
		/**
		 * 集合转换成数组 toArray()
		 */
		Collection c = new ArrayList();
		c.add("hello");
		c.add("world");
		Object[] objs = c.toArray();
		for (int i = 0; i < objs.length; i++) {
			// 遍历数组
			Object o = objs[i];
			System.out.println(o);
		}
	}
}

附:iterator() 底层源码

package java.util;

import java.util.function.Predicate;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;


public interface Collection<E> extends Iterable<E> {
	
    int size();

    boolean isEmpty();

    boolean contains(Object o);

    Iterator<E> iterator();

    Object[] toArray();

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

    boolean add(E e);

    boolean remove(Object o);

    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();
    
    boolean equals(Object o);
    
    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);
    }
}

三、集合迭代/遍历

1. Iterator底层源码

package java.util;

import java.util.function.Consumer;

public interface Iterator<E> {
    boolean hasNext(); // 如果仍有元素可以迭代,则返回 true
    E next(); // 返回迭代的下一个元素
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

2. 迭代/遍历

  • 在Map集合中不能用,在所有的Collection以及子类中使用(所有Collection通用的一种方式)
  • 存进去什么类型,取出来还是什么类型,只不过在输出的时候会转换成字符串(println调用toString(),重写toString())
  1. 获取集合对象的迭代器对象Iterator
  2. 通过获取的迭代器对象开始迭代/遍历集合
  • 迭代器对象Iterator中的方法:
    boolean hasNext() 如果仍有元素可以迭代,则返回 true;
    E next() 返回迭代的下一个元素
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Test {
	public static void main(String[] args) {
		/**
		 * 对集合Collection进行遍历/迭代
		 */
		// 创建集合对象
		Collection c = new ArrayList();
		// 添加元素
		c.add("abc");
		c.add("345");
		c.add(100);
		c.add(new Object());
		// 1. 获取集合对象的迭代器对象Iterator
		Iterator it = c.iterator();
		// 2. 通过获取的迭代器对象开始迭代/遍历集合
		while (it.hasNext()) {
			Object obj = it.next();
			System.out.println(obj);
		}
	}
}

JavaSE Collection

3. NoSuchElementException异常

  • 一直取,不判断,会出现 java.util.NoSuchElementException 异常
while(true){
    Object obj = it.next();
    System.out.println(obj);
}
相关标签: JavaSE学习路线