Java中关于Collection集合(接口)的介绍
Collection
Collection层次结构中的跟接口。Collection表示一组对象,这些对象也被称为Collection的元素,一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。
集合和数组的区别
- 长度的区别
数组长度是固定的. int[] arr = new int[3]/int[] arr = {11,22,33…} ;
集合长度是可变的! - 存储数据类型的区别
数组既可以存储基本数据类型,也可以存储引用数据类型
集合只能存储引用数据类型 - 存储元素的区别
数组存储同一种类型的元素 举例: 水杯中的水
集合可以存储多个类型的元素
Collection的基本功能
添加功能boolean add(Object e);
添加单个元素boolean addAll(Collection c);
添加一个集合中的元素
删除功能void clear();
删除所有元素remove(Object o);
删除一个元素removeAll(Collectiong c)
移除一个集合中的元素,移除的元素是两个集合的交集元素,如果没有交集元素,则删除失败。
获取功能int size();
获取元素的方法Interator interator();
迭代器(遍历集合的特有功能)
转换功能Object[] toArray();
将集合转换成数组
交集功能boolean retainAll(Collection c)
A集合对B集合取交集,获取到的交集元素在A集合中。
判断功能boolean contains(Object o)
:一个集合中是否包含指定的元素boolean containsAll(Collection c)
包含一个集合中的元素 思考: 包含一个算是包含还是包含所有算是包含?boolean isEmpty():
判断集合是否为空. 空,就是true
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
//添加功能
c1.add("hello"); //添加一个元素
c1.add("world");
c2.add("world");
System.out.println(c1); //[hello, world]
System.out.println(c2); //[world]
//删除功能
c1.remove("hello"); //删除一个元素
System.out.println(c1); //[world]
System.out.println("--------------------------------------");
c1.add("hello");
c1.add("java"); //c1:hello world java c2: world
c1.removeAll(c2); //移除一个集合中的元素,移除的元素是两个集合的交集元素
System.out.println(c1); //[hello, java]
System.out.println("--------------------------------------");
//获取功能
System.out.println(c1.size());//2
System.out.println("--------------------------------------");
//转换功能
Object[] objects = c1.toArray();//将集合转换成数组
for (Object object : objects) {
System.out.println(object);
}
//hello
//java
System.out.println("--------------------------------------");
//判断功能
System.out.println(c1 +","+c2); //[hello, java],[world]
System.out.println(c1.contains("hello"));//判断c1中是否包含hello 有应该返回true
System.out.println(c1.containsAll(c2));
System.out.println(c1.isEmpty()); //判断集合是否为空. 集合非空 返回false
Collection中要注意的高级功能
boolean removeAll(Collection c)
:移除一个集合中的元素 思考:移除一个算是移除还是移除所有算是移除呢?
删除一个就算返回true!
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
c1.add("hello");
c1.add("world");
c1.add("I");
c1.add("Love");
c1.add("Java");
//c2.add("I");
c2.add("Love");
c2.add("You");
System.out.println(c1+","+c2);
boolean b = c1.removeAll(c2);
System.out.println(b);
System.out.println(c1+","+c2);
// [hello, world, I, Love, Java],[Love, You]
// true
// [hello, world, I, Java],[Love, You]
boolean containsAll(Collection c)
:包含一个集合中的元素 思考: 包含一个算是包含还是包含所有算是包含?
包含所有才算是包含,如果下面的c2中有 “You”,就会返回false
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
c1.add("hello");
c1.add("world");
c1.add("I");
c1.add("Love");
c1.add("Java");
c2.add("I");
c2.add("Love");
//c2.add("You");
System.out.println(c1+","+c2);
boolean b = c1.containsAll(c2);
System.out.println(b);
//[hello, world, I, Love, Java],[I, Love]
//true
boolean retainAll(Collection c)
:思考假设A集合对B集合取交集,交集的元素去哪里?
交集元素会在A里,返回的boolean表达的意思A集合中的元素是否发生变化.如果没有变化,false。
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
c1.add("hello");
c1.add("world");
c1.add("I");
c1.add("Love");
c1.add("Java");
c2.add("I");
c2.add("Love");
c2.add("You");
System.out.println(c1+","+c2);
boolean b = c1.retainAll(c2);
System.out.println(b);
System.out.println(c1+","+c2);
//[hello, world, I, Love, Java],[I, Love, You]
//true
//[I, Love],[I, Love, You]
集合的遍历
把集合转换为数组,再用for循环遍历
Collection c1 = new ArrayList();
Object[] objects = c1.toArray();//将集合转换成数组
for (Object object : objects) {
System.out.println(object);
}
集合的专有遍历:迭代器
Collection c1 = new ArrayList();
c1.add("hello");
c1.add("world");
c1.add("I");
c1.add("Love");
c1.add("Java");
//获得迭代器
Iterator iterator = c1.iterator();
while (iterator.hasNext()){
String str = (String) iterator.next();
System.out.println(str+" 长度是:"+str.length());
}
/*hello 长度是:5
world 长度是:5
I 长度是:1
Love 长度是:4
Java 长度是:4 */