JavaSE Collection
程序员文章站
2022-03-16 18:51:22
...
Java自我学习路线
一、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())
- 获取集合对象的迭代器对象Iterator
- 通过获取的迭代器对象开始迭代/遍历集合
- 迭代器对象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);
}
}
}
3. NoSuchElementException异常
- 一直取,不判断,会出现 java.util.NoSuchElementException 异常
while(true){
Object obj = it.next();
System.out.println(obj);
}
上一篇: STM32_IAR工程建立与测试