目录
- 单列集合体系结构
- Collection介绍
- Collection的遍历方式
- 迭代器遍历
- 增强for遍历
- Lambda表达式遍历
- 代码演示
单列集合体系结构
注意:
List系列集合添加的元素是有序(存取数据的顺序相同),可重复,有索引的
Set系列集合 添加的元素是无序,不能重复,无索引的
Collection介绍
Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。
常用方法
方法名称 | 说明 |
public boolean add(E e) | 把给定的对象添加到当前集合中 |
public void clear() | 清空集合中所有的元素 |
public boolean remove(E e) | 把给定的对象在当前集合中删除 |
public boolean contains(0bject obj) | 判断当前集合中是否包含给定的对象 |
public boolean isEmpty() | 判断当前集合是否为空 |
public int size() | 返回集合中元素的个数/集合的长度 |
代码演示:
import Java.util.ArrayList; import java.util.Collection; public class Test1 { public static void main(String[] args) { //Collection是一个接口,我们不能直接创建他的对象。 //所以,现在我们学习他的方法时,只能创建他实现类的对象。 //实现类:ArrayList Collection<String> coll = new ArrayList<>(); //把给定的对象添加到当前集合中 coll.add("aaa"); coll.add("bbb"); System.out.println(coll);//[aaa, bbb] //把给定的对象在当前集合中删除 coll.remove("aaa"); System.out.println(coll);//[bbb] //返回集合中元素的个数/集合的长度 System.out.println(coll.size());//1 //判断当前集合是否为空xhNcUoCBX System.out.println(coll.isEmpty());//false //清空集合中所有的元素 coll.clear(); System.out.println(coll);//[] System.out.println(coll.isEmpty(android));//true //判断当前集合中是否包含给定的对象 coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); System.out.println(coll);//[aaa, bbb, ccc] System.out.println(coll.contains("bbb"));//true System.out.println(coll.contains("ddd"));//false } }
注意:
contains方法在底层依赖equals方法判断对象是否一致
如果存的是自定义对象,没有重写equals方法,那么默认使用Object类中的equals方法进行判断,而object类中equals方法判断的是地址值是否相同,要想判断自定义对象中的内容是否相同,需要在自定义的Javabean类中,重写equals方法举例:如果同姓名和同年龄,就认为是同一个学生。
代码实现:
测android试类:
import java.util.ArrayList; import java.util.Collection; public class Test { public static void main(String[] args) { //举例:如果同姓名和同年龄,就认为是同一个学生。 Collection<Student> coll = new ArrayList<>(); Student s1 = new Student("zhangsan", 23); coll.add(s1); Student s2 = new Student("zhangsan", 23); Student s3 = new Student("lisi", 24); /* //重写equals方法前比较的是自定义对象的地址值 //s2和s3是新new出来的,与s1的地址都不同,所以都是false System.out.println(coll.contains(s2));//false System.out.println(coll.contains(s3));//false*/ //重写equals方法后,php比较的是自定义对象内的属性值 System.out.println(coll.contains(s2));//true System.out.println(coll.contains(s3));//false } }
自定义对象的Javabean类:
import java.util.Objects; public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //重写equals方法 @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && Objects.equals(name, student.name); } }
Collection的遍历方式
迭代器遍历
说明
php迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式,不依赖索引进行遍历。
Collection集合获取迭代器
方法名称 | 说明 |
Iterator<E> iterator () | 返回迭代器对象 默认指向当前集合的0索引 |
Iterator中的常用方法
方法名称 | 说明 |
boolean hasNext() | 判断当前位置是否有元素, 有元素返回true,没有元素返回false |
E next () | 获取当前位置的元素并将迭代器对象移向下一个位置。 |
void remove () | 删除获取到的元素 |
代码演示
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Test2 { public static void main(String[] args) { Collection<String> coll = new ArrayList<>(); coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); Iterator<String> it = coll.iterator(); while (it.hasNext()) { String str = it.next(); System.out.println(str); } //aaa //bbb //ccc } }
细节注意点
1,迭代器遍历完毕,指针不会复位,重新遍历该集合时需要重新获取该集合的迭代器对象
2,循环中只能用一次next方法,否则前一个next方法将迭代器对象移向下一个位置时该位置没有元素,后一个next方法获取不到元素就会报错(NoSuchElementException)3,迭代器遍历时,不能用集合的方法进行增加或者删除,可以用迭代器的方法进行删除
增强for遍历
说明
增强for的底层就是迭代器,为了简化迭代器的代码书写的。
它是JDK5之后出现的,其内部原理就是一个Iterator迭代器所有的单列集合和数组都能用增强for进行遍历。
格式
for (元素的数据类型 变量名 :数组或者集合){
具体代码;
}
代码演示
import java.util.ArrayList; import java.util.Collection; public class Test3 { public static void main(String[] args) { Collection<String> coll = new ArrayList<>(); coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); for (String s : coll) { System.out.println(s); } //aaa //bbb //ccc } }
细节注意点
上述代码中的s是一个第三方变量,依次代表集合中的每一个数据
对s进行操作不会影响集合中的数据
Lambda表达式遍历
说明
得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
方法
方法名称 | 说明 |
default void forEach(Consumer<? super T> action): | 结合lambda遍历集合 |
代码演示
import java.util.ArrayList; import java.util.Collection; import java.util.function.Consumer; public class Test4 { public static void main(String[] args) { Collection<String> coll = new ArrayList<>(); coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); //匿名内部类 coll.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); //lambda表达式 coll.forEach(s -> System.out.println(s)); //aaa //bbb //ccc } }
到此这篇关于Java 集合 Collection的文章就介绍到这了,更多相关Java 集合 Collection内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论