java的Collection类详解
数组: 存储同一种数据类型的集合容器.
数组的特点:
1. 只能存储同一种数据类型的数据。
2. 一旦初始化,长度固定。
3. 数组中的元素与元素之间的内存地址是连续的。
注意: Object类型的数组可以存储任意类型的数据。
集合:集合是存储对象数据的集合容器。
集合比数组的优势:
1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。
2. 集合的长度是会发生变化的,数组的长度是固定的。
------------| Collection 单例集合的根接口
----------------| List 如果是实现了List接口的集合类,具备的特点: 有序,可重复。
-------------------| ArrayList ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
-------------------| LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
-------------------| Vector(了解即可) 底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
----------------| Set 如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
-------------------| HashSet 底层是使用了哈希表来支持的,特点: 存取速度快.
-------------------| TreeSet 如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。
Collection接口中的方法:
增加
add(E e) 添加成功返回true,添加 失败返回false.
addAll(Collection c) 把一个集合 的元素添加到另外一个集合中去。
删除
clear()
remove(Object o)
removeAll(Collection c)
retainAll(Collection c)
查看
size()
判断
isEmpty()
contains(Object o)
containsAll(Collection<?> c)
迭代
toArray()
运行结果:
添加成功吗?true
查看元素个数:4
集合的元素:[令计划, 徐才厚, 周永康, 郭美美]
判断
isEmpty()
contains(Object o)
containsAll(Collection<?> c)
c集合有包含c2集合中的所有元素吗?false
存在该元素吗?true
集合的元素:[{编号:110 姓名:狗娃}, {编号:119 姓名:狗剩}, {编号:120 姓名:铁蛋}]
迭代
toArray()
运行结果:
{编号:110 姓名:狗娃}
运行结果:
集合的元素:[]
数组的特点:
1. 只能存储同一种数据类型的数据。
2. 一旦初始化,长度固定。
3. 数组中的元素与元素之间的内存地址是连续的。
注意: Object类型的数组可以存储任意类型的数据。
集合:集合是存储对象数据的集合容器。
集合比数组的优势:
1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。
2. 集合的长度是会发生变化的,数组的长度是固定的。
------------| Collection 单例集合的根接口
----------------| List 如果是实现了List接口的集合类,具备的特点: 有序,可重复。
-------------------| ArrayList ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
-------------------| LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
-------------------| Vector(了解即可) 底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
----------------| Set 如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
-------------------| HashSet 底层是使用了哈希表来支持的,特点: 存取速度快.
-------------------| TreeSet 如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。
Collection接口中的方法:
增加
add(E e) 添加成功返回true,添加 失败返回false.
addAll(Collection c) 把一个集合 的元素添加到另外一个集合中去。
删除
clear()
remove(Object o)
removeAll(Collection c)
retainAll(Collection c)
查看
size()
判断
isEmpty()
contains(Object o)
containsAll(Collection<?> c)
迭代
toArray()
iterator()
import java.util.ArrayList;
import java.util.Collection;
public class Demo2 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("令计划");
c.add("徐才厚");
c.add("周永康");
System.out.println("添加成功吗?"+c.add("郭美美"));
//创建集合
Collection c2 = new ArrayList();
c2.add("徐才厚");
c2.add("郭美美");
c2.add("狗娃");
/*
c.addAll(c2); // 把c2的元素的添加到c集合 中去。
*/
/*
删除方法:
c.clear(); //clear()清空集合中的元素
System.out.println("删除成功吗?"+c.remove("美美")); // remove 指定集合中的元素删除,删除成功返回true,删除失败返回false.
c.removeAll(c2); //删除c集合中与c2的交集元素。
c.retainAll(c2); //保留c集合与c2的交集元素,其他的元素一并删除。
*/
System.out.println("查看元素个数:"+c.size());
System.out.println("集合的元素:"+ c);
}
}
运行结果:
添加成功吗?true
查看元素个数:4
集合的元素:[令计划, 徐才厚, 周永康, 郭美美]
判断
isEmpty()
contains(Object o)
containsAll(Collection<?> c)
import java.util.ArrayList;
import java.util.Collection;
class Person{
int id;
String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "{编号:"+this.id+" 姓名:"+ this.name+"}";
}
@Override
public boolean equals(Object obj) {
Person p = (Person)obj;
return this.id == p.id ;
}
//java规范: 一般重写equlas方法我们都会重写hashCode方法的。
@Override
public int hashCode() {
return this.id;
}
}
class Dog{}
public class Demo3 {
public static void main(String[] args) {
/*Collection c = new ArrayList();
c.add("令计划");
c.add("徐才厚");
c.add("周永康");
System.out.println("判断集合是否为空元素:"+ c.isEmpty());
System.out.println("判断集合中是否存在指定的元素:"+ c.contains("薄熙来"));*/
//集合添加自定义的元素
Collection c = new ArrayList();
c.add(new Person(110,"狗娃"));
c.add(new Person(119,"狗剩"));
c.add(new Person(120,"铁蛋"));
Collection c2 = new ArrayList();
c2.add(new Person(110,"狗娃"));
c2.add(new Person(119,"狗剩"));
c2.add(new Person(104,"陈狗剩"));
System.out.println("c集合有包含c2集合中的所有元素吗?"+ c.containsAll(c2));
//如果在现实生活中,只要身份证编号一致,那么就为同一个人。
System.out.println("存在该元素吗?"+c.contains(new Person(120,"陈铁蛋"))); // 其实contains方法内部是依赖于equals方法进行比较的。
System.out.println("集合的元素:"+ c);
}
} 运行结果:c集合有包含c2集合中的所有元素吗?false
存在该元素吗?true
集合的元素:[{编号:110 姓名:狗娃}, {编号:119 姓名:狗剩}, {编号:120 姓名:铁蛋}]
迭代
toArray()
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class Demo4 {
public static void main(String[] args) {
/*Collection c = new ArrayList();
c.add("令计划");
c.add("徐才厚");
c.add("周永康");
Object[] arr = c.toArray(); //把集合中的元素全部 存储到一个Object的数组中返回。
System.out.println("数组的元素:"+Arrays.toString(arr));*/
Collection c = new ArrayList();
c.add(new Person(110,"狗娃"));
c.add(new Person(119,"狗剩"));
c.add(new Person(120,"铁蛋"));
Object[] arr = c.toArray();
//需求: 把编号是110的人信息 输出。
for(int i = 0 ; i<arr.length ; i++){
Person p = (Person) arr[i]; //从Object数组中取出的元素只能使用Object类型声明变量接收,如果需要其他 的类型需要进行强制类型转换。
if(p.id==110){
System.out.println(p);
}
}
}
}
运行结果:
{编号:110 姓名:狗娃}
Collection---迭代的方法:
toArray()
iterator()
迭代器的作用:就是用于抓取集合中的元素。
迭代器的方法:
hasNext() 问是否有元素可遍历。如果有元素可以遍历,返回true,否则返回false 。
next() 获取元素...
remove() 移除迭代器最后一次返回 的元素。
NoSuchElementException 没有元素的异常。
出现的原因: 没有元素可以被迭代了。。。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo2 {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("狗娃");
c.add("狗剩");
c.add("铁蛋");
c.add("美美");
/*//遍历集合的元素------>方式一: 可以使用toArray方法。
Object[] arr = c.toArray(); // toArray() 把集合 的元素存储到一个 Object的数组中 返回。
for(int i = 0 ; i<arr.length ; i++){
System.out.print(arr[i]+",");
}
//要求使用iterator迭代器遍历。
*/
Iterator it = c.iterator(); //返回一个迭代器 疑问:iterator()方法返回的是一个接口类型,为什么接口又可以调用方法可以使用呢? iterator 实际 上返回的是iterator接口的实现类对象。
/*
while(it.hasNext()){ // hasNext() 问是否有元素可以遍历。
System.out.println("元素:"+ it.next()); //获取元素
}
*/
/*it.next();
it.next();
it.remove(); //删除迭代器最后一次返回的元素。
*/
//清空集合 的元素
while(it.hasNext()){
it.next();
it.remove();
}
System.out.println("集合的元素:"+ c);
}
}
运行结果:
集合的元素:[]
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: java中break标记的使用
- 下一篇: linux的SIGCHLD信号
